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

如何将特定于项目的信息添加到Git提交注释中?,git,version-control,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: #

对于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
#请输入更改的提交消息。起跑线
#将忽略带有“#”的消息,空消息将中止提交。
#论分行行长
#要提交的更改:
#(使用“git重置磁头…”取消分级)
#
#修改:important-file.txt
#
#已更改但未更新:
#(使用“git add…”更新将提交的内容)
#(使用“git签出--…”放弃工作目录中的更改)
#
#修改:some-other-thing.txt
#
#未跟踪的文件:
#(使用“git add…”包含在将提交的内容中)
#
#untracked.txt
是否可以向该文件添加更多材料?一个明确的用例适用于那些使用问题跟踪软件的人,比如,指定额外的语法元素。例如,Redmine用户可以包括问题编号和一些特殊的关键字,以将问题标记为已解决:关键字是“refs”(和“references”)和“fixes”(或“closes”)——但我经常发现很难记住这些关键字

那么,如果可以在提交指令的底部附加一些特定于项目的文本,这将非常方便


是否有任何现有的方法可以做到这一点,或者我需要破解一个?作为一个附带问题,是否有其他VCSE(如Mercurial)有类似的行为?

我很确定您可以使用prepare-commit-msg钩子来实现这一点。查看以了解更多信息。

您可以通过
准备提交消息
选项1调整提交消息: 正如其他人提到的,使用Git实现这一点的直接方法是钩子

然而,这一战略存在一些问题,必须加以考虑。从Pro Git的第7.4章:

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

备选案文2: 如所述,请使用

备选案文3: 您可以自定义Git构建,其中包括附加说明。当前提交消息中包含的指令在Git源代码中硬编码。请参见从处开始的
$GIT\u SRC/builtin/commit.c

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

备选案文4: 为Git创建一个补丁,添加此功能并将其提交到邮件列表。如果您(或其他人)决定尝试此方法,我将首先征求列表中关于如何继续的建议


反复无常的: Mercurial中的钩子脚本的行为方式类似。来自Mercurial:最终指南:

在Mercurial中,挂钩不是修订版 受控,并且在 您可以克隆或从存储库中提取。 原因很简单:一个钩子 这是一个完全武断的故事 可执行代码。它在你的脚下运行 用户身份,具有您的权限 水平仪,在你的机器上

这对任何人来说都是极其鲁莽的 分布式版本控制系统 实施修订控制挂钩, 因为这将提供一个简单的解决方案 可利用的方法来颠覆 修订版用户帐户 控制系统


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

第一个链接是死链接。注意,即使这样做,也不是所有用户都会看到它。例如,我经常从SourceTree提交,它不打开编辑器,因此从不显示提交消息模板。