我的目标是维护存储库中每个文件末尾的所有提交历史/消息的日志。我使用commit-msg钩子来获取提交消息,准备它并将其附加到文件中。
但是,我注意到,由于文件在暂存后发生了变化,git状态仍然显示为已修改。这样做的正确方法是什么?
发布于 2014-06-07 17:26:01
虽然我同意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的提交,因此钩子最终复制了提交消息。
你可以决定是尝试让它工作,还是干脆放弃,但我建议你选择后者。
发布于 2017-02-13 20:40:10
我从@hvd修改了提交后钩子,并能够修改代码以自动将提交消息详细信息添加到签入文件位置。
#!/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,它将再次提交最后一次提交。
注意:如果对特定目录进行了更改,则这些目录将添加一个版本文件。
https://stackoverflow.com/questions/24095474
复制相似问题