在 git 中强制提交消息格式

Posted

技术标签:

【中文标题】在 git 中强制提交消息格式【英文标题】:Enforce commit message format in git 【发布时间】:2016-10-09 03:26:27 【问题描述】:

如何在 Git 中强制执行提交消息格式?

这可以在存储库级别设置,以便创建分支的每个人都可以执行此操作吗?

【问题讨论】:

能否请您在上一个问题 (***.com/q/37671334/6309) 中告诉我们您认为哪个答案更好? (***.com/help/accepted-answer) 如果你想检查你是否落后,如果你落后,那么做一个 git fetch,你还没有接受正确的答案。 【参考方案1】:

服务器端 Git 挂钩是您的解决方案,但也存在设置和维护挂钩(通常还有服务器)的开销。

如果您正在寻找 SaaS 解决方案(用于服务器端 Git 挂钩)- 这正是 Datree* 可以为您做的。

*免责声明:我是 @Datree 的联合创始人和产品负责人,但作为一名积极的开源贡献者,我深谙此道。 我也写了一篇关于这个问题的博文——How to Get More Out of Your Git Commit Message

【讨论】:

【参考方案2】:

如 Git ProBook "Customizing Git - An Example Git-Enforced Policy" 中所述,这种强制执行将通过 hook 设置,更具体地说,是像 @987654323 这样的 服务器端 挂钩@一:

所有服务器端工作都将进入您的 hooks 目录中的 update 文件。 update 钩子在每个被推送的分支上运行一次,并接受三个参数:

被推送到的引用的名称 该分支所在的旧版本 正在推送的新版本

这比客户端钩子(如pre-commit 之一)更受欢迎,它:

必须由每个用户手动设置 可以绕过

对于给定的 repo,如果您的策略未得到遵守,服务器端挂钩将通过拒绝 git push 来强制执行您想要的任何规则。

这假设您可以控制用户推送到的远程存储库托管服务器。

如果你不这样做,你会回到客户端预提交钩子,可以通过 git 模板设置,whose template directory can be shared amongst all users (starting with git 2.9, June 2016)。

【讨论】:

以上是关于在 git 中强制提交消息格式的主要内容,如果未能解决你的问题,请参考以下文章

在git中实施提交消息格式

如何在GIT Rebase Interactive Squash之后删除远程存储库上的历史记录提交消息

在 Github 提交中强制执行 PEP-8'ish 格式

如何自定义 git rebase --interactive 提交消息的格式?

Git(三)代码提交规范

在 git 中打印给定提交的提交消息