假设我在分支“master”中有一个文件“ChangeLog”。我想记录有关此文件中任何分支的所有更改的信息(比提交消息和其他描述性信息更详细)。
我git checkout -b revA
,执行编辑,更新ChangeLog
和git commit
。
git checkout -b master
。此结帐将使用分支“master”中的版本替换ChangeLog。
我希望ChangeLog能够自动成为最近修改过的版本无论我检查过哪个分支。我不想手动合并(或者,很可能,忘记合并)将ChangeLog从其他分支合并到我当前的分支。
我还没有找到任何似乎允许这样做的东西。有可能这样做吗?
答案 0 :(得分:8)
您可以使用结账后挂钩:
#!/bin/sh
newref="$2"
isbranch="$3"
# ignore file checkouts
if test $isbranch -eq 0; then
exit 0
fi
path=ChangeLog
git for-each-ref --sort=-committerdate \
--format='%(objectname) %(refname:short)' \
refs/heads/\* |
while read sha ref; do
if git rev-parse --verify --quiet "$sha:$path" >/dev/null
then
if test "$newref" != "$sha"; then
echo Checking out $path from $ref
git checkout $sha -- "$path"
fi
break
fi
done
如果合适,您仍然可以在分支上添加和提交ChangeLog
。
这个钩子按其头部的相应提交日期对分支进行排序,这可能会有问题。假设您创建一个以master的历史记录中的提交为根的主题分支。尽管ChangeLog
的快照在日历时间方面较旧,但上面的钩子会将其视为最新的,因为它是由最近创建的提交引用的,所以要小心你不要当您对ChangeLog
进行非分段更改时,通过切换分支会意外丢失工作。
答案 1 :(得分:7)
我知道这个答案是在乞求这个问题,但我认为其他任何因素都会让你自己陷入困境。
如果您在提交消息中添加了足够的描述,则git log
符合要求。特定分支中的所有更改都由进入它的提交完全描述,并且它不可能过时或者描述不属于它的更改。
自从我转向git后,我已经放弃了手动维护更改日志。对我来说,它没有任何价值和巨大的成本。
没有理由不在提交中提供完整的描述。使用--amend
,您可以修复拼写错误并添加细节,如果您坚持使用简短的主题行和更全面的描述,那么您可以选择短日志格式和长日志格式。
答案 2 :(得分:4)
将其放在一个单独的存储库中,并使用submodule将其链接到每个分支。
答案 3 :(得分:2)
编写一个post-commit钩子,将文件合并到其他分支中。 http://kernel.org/pub/software/scm/git/docs/githooks.html