如何将项目特定信息添加到Git提交注释?

时间:2010-07-07 13:44:08

标签: git version-control

使用Git,如果你要提交,它会在提交消息下包含一个被注释掉的部分。其中包含有关编写提交消息的说明以及正在更改的文件列表。像这样:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:  important-file.txt 
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   some-other-thing.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       untracked.txt

是否可以在此文件中添加更多资料?一个明确的用例是那些使用问题跟踪软件如TracRedmine等的用户正在指定额外的语法元素。例如,Redmine用户可以包含问题编号和一些特殊关键字,以便将问题标记为已解决:关键字是“refs”(和“引用”)和“修复”(或“关闭”) - 但我经常发现它很难记住关键词。

如果可以在提交说明的底部附加一些特定于项目的文本,那将会很方便。

有没有现成的方法可以做到这一点,还是我需要攻击一个?作为一个副作用,其他任何VCS(如Mercurial)都有类似的行为吗?

4 个答案:

答案 0 :(得分:5)

我使用了commit.template(如here所述)。我本可以使用prepare-commit-msg钩子,但是提交模板可以使工作稍微容易一点,而且我可以将提交模板保留在项目的版本控制中。

答案 1 :(得分:3)

选项1:

正如其他人所提到的,使用Git执行此操作的直接方法是prepare-commit-message挂钩。

但是,必须考虑该战略的问题。从Pro Git的第7.4章开始:

  

[客户端钩子脚本]不是   随着一个克隆转移   项目,你必须分发这些   脚本以其他方式然后有   您的用户将其复制到他们的   .git / hooks目录并制作它们   可执行文件。你可以分发这些   项目内或项目中的钩子   单独的项目,但没有办法   自动设置它们。

选项2:

Tom Morris所述,请使用commit template

选项3:

您可以自定义构建Git,其中包含您的其他说明。当前提交消息中包含的指令在Git源代码中是硬编码的。从line 655开始,请$GIT_SRC/builtin/commit.c

这种方法可能不是首选,因为每次发布新版本的Git时都必须应用补丁。

选项4:

为Git创建一个补丁,添加此功能并将其提交到邮件列表。如果您(或其他人)决定尝试此操作,我首先会从列表中寻求有关如何继续的建议。


水银:

Mercurial中的Hook脚本的行为方式类似。来自Mercurial的Chapter 10:权威指南:

  

在Mercurial中,钩子不是修订版   控制,不要传播的时候   您从存储库克隆或拉取。   原因很简单:一个钩子   是完全随意的   可执行代码。它运行在你的   用户身份,享有您的特权   等级,在你的机器上。

     

任何人都会非常鲁莽   分布式修订控制系统   实现修订控制的钩子,   因为这会很容易   可剥削的方式颠覆了   修订版用户的帐户   控制系统。

答案 2 :(得分:1)

您可以通过prepare-commit-message hook调整提交消息。

答案 3 :(得分:0)

我很确定你可以使用prepare-commit-msg钩子。有关详细信息,请查看githooks