我有一个模板,有一个样本(例如:工作ID #ADC 0000)
- <Git_base>/.gitmessage
我已经把它添加到.git/hooks中的prepare-commit-msg消息中。
#!/bin/bash
# Get the default commit message from a file
commit_msg_file="/d/gitTest/.gitmessage"
commit_msg=$(cat "$commit_msg_file")
# Prepend the default commit message to the commit message file
echo -e "$commit_msg\n$(cat "$1")" > "$1"
我看过https://git-scm.com/book/en/v2/Customizing-Git-An-Example-Git-Enforced-Policy,但不知道如何连接模板和服务器端钩子(我假设客户端不会强制执行它,也不能在克隆仓库时获得它,除非他们设置了hookPath,这也不能强制执行)。
1条答案
按热度按时间tyg4sfes1#
你不能强迫人们在他们自己的仓库中使用一个模板或一组钩子,在很多情况下,你也不想这样做。例如,有人可能想创建一个快速的WIP提交,或者创建squash或fixup提交,以便以后重新定位到他们的分支中,或者任何其他高级开发技术,你也不想阻止这些。
您可以在钩子中使用shell(或Python或Ruby)脚本来验证消息是否符合某种格式标准。如果您要包含票证ID之类的内容,那么最好在trailer中进行验证,trailer是专门为此目的而设计的。
最简单的方法是在你的CI系统中,你可以这样做(假设你使用的是
Ticket-ID
trailer):如果它找到了ticket ID,则退出0,如果没有,则退出非零,这通常会导致分支失败。(注意,它不会查看所有的提交,只查看最新的提交。)如果结构不同,您也可以做不同的事情,比如:
如果你使用的是
pre-receive
钩子,那么你可以这样做:其中
my-script REF
是一个脚本,它解析git rev-list
的输出以获取引用REF,并在失败时以非零值退出。