我的目标是在我的存储库中的每个文件末尾维护所有提交历史记录/消息的日志。我使用commit-msg钩子来获取提交消息,准备它并将其附加到文件中。
但是,我注意到由于文件在登台后发生了变化,因此git status仍显示为已修改。这样做的正确方法是什么?
答案 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,它将再次提交到最后一次提交。
注意:如果特定目录有更改,则这些目录将添加一个版本文件。