Git:在预提交挂钩后更新提交消息的git status部分

时间:2015-12-28 11:35:29

标签: git commit githooks pre-commit-hook

我正在运行预提交挂钩,可能会将新文件添加到提交中。但是,虽然这在技术上按预期工作,但提交消息的git status部分不反映此更改。

例如,我在提交中添加了文件x,因此我的git status预先提供了以下内容:

repo>git status
On branch development
Your branch is up-to-date with 'origin/development'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   x

现在,假设我的git hook确定文件y也需要提交。虽然之后我可以看到y确实已经为提交暂存,但我的空提交消息(在预提交挂钩执行之后)给出了以下内容:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch development
# Your branch is up-to-date with 'origin/development'.
#
# Changes to be committed:
#       new file:   x
#

即使我期待

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch development
# Your branch is up-to-date with 'origin/development'.
#
# Changes to be committed:
#       new file:   x
#       new file:   y
#

确实,在中止提交后,我得到以下git status

repo>git status
On branch development
Your branch is up-to-date with 'origin/development'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   x
        new file:   y

换句话说,如何在预提交钩子中“刷新”提交消息的自动生成部分?

编辑: 我的预提交钩子目前看起来如下。

#!/bin/sh
gulp --production

vendor/bin/phpunit

rc=$?
if [[ $rc != 0 ]] ; then
    echo "phpunit failed - commit denied"
    exit $rc
fi

git add public

gulp执行诸如编译SCSS之类的操作,并可能将内容移动到我的公共/目录中。如果发生这种情况,我想将这些文件添加到提交中,因此最后是git add public指令。 因此,即使这些文件被添加到提交中,提交消息的git status部分也不会反映这一点。

1 个答案:

答案 0 :(得分:0)

似乎git commit-msg中的git status部分是在pre-commit-hook运行之前创建的。因此虽然它不会在COMMIT-MSG中显示,但它仍然会被提交。这似乎是git的一个小bug。

Can a Git hook automatically add files to the commit?