将提交消息自动附加到Git中提交的文件

时间:2014-06-07 08:46:52

标签: git githooks

我的目标是在我的存储库中的每个文件末尾维护所有提交历史记录/消息的日志。我使用commit-msg钩子来获取提交消息,准备它并将其附加到文件中。

但是,我注意到由于文件在登台后发生了变化,因此git status仍显示为已修改。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

虽然我同意Oli Charlesworth的评论,你不应该这样做,但它实际上是可能的。这是一个简单的提交后挂钩,它重写提交,将提交消息附加到文件“changelog”。

if ! test ${GIT_BYPASS_POST_COMMIT+set}
then
    export GIT_BYPASS_POST_COMMIT=1

    git show --format=%B -s >>changelog
    git add changelog
    git commit --amend -C HEAD
fi

如果你试试这个,我希望你会很快发现它与git的正常使用效果不佳。最简单的示例是,如果修改提交,您将修改已更改changelog的提交,因此挂钩最终会复制提交消息。

由你决定是否要尝试让它发挥作用,或者只是放弃它,但我推荐后者。

答案 1 :(得分:1)

我修改了@hvd的post-commit钩子,并且能够修改代码以自动将提交消息详细信息添加到已检入的文件位置。

#!/bin/sh
path="D:/temp.txt"
git diff HEAD~1 --name-only > ${path}
if ! test ${GIT_BYPASS_POST_COMMIT+set}
then
    export GIT_BYPASS_POST_COMMIT=1
    for line in `cat $path`; do
        if [[ ! $line =~ version.txt ]];then
            file_path=`dirname $line`
            git show --format=%B -s | cut -d '#' -f2 > ${file_path}/version.txt
            echo " - " >> ${file_path}/version.txt
            echo $line >> ${file_path}/version.txt
            git add ${file_path}/version.txt
        fi  
    done    
    git commit --amend -C HEAD
fi

最初它将捕获提交期间更改的所有文件,并将保存到文件中。现在,这将读取文件列表中除version.txt文件之外的每个文件,并将添加包含 *"commit message - file name"* 的version.txt,它将再次提交到最后一次提交。

注意:如果特定目录有更改,则这些目录将添加一个版本文件。