假设我在分支“master”中有一个文件“ChangeLog”。我想在此文件中记录有关任何分支中所有更改的信息(比提交消息和其他描述性信息更详细)。
I git checkout -b revA
,执行编辑,更新 ChangeLog
和 git commit
。
然后我 git checkout -b master
。此 checkout 将用分支“master”中的版本替换 ChangeLog。
我希望 ChangeLog 自动成为最近修改的版本不管我 check out 的是哪个分支。我不想将 ChangeLog 从其他分支手动 merge (或者很可能是忘记 merge )到我当前的分支中。
我还没有找到任何似乎允许这样做的东西。可以这样做吗?
最佳答案
您可以使用 checkout 后 Hook :
#!/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
。
这个钩子(Hook)根据分支头各自的提交日期对分支进行排序,这可能会有问题。假设您创建了一个主题分支,该分支 Root 于 master 历史记录中的一次提交。尽管它的 ChangeLog
快照在日历时间意义上较旧,但上面的钩子(Hook)会将其视为最新的,因为它被最近创建的提交引用,所以 要小心当您对 ChangeLog
进行未暂存更改时,您不会因切换分支而意外丢失工作。
关于GIT - 如何在所有分支中保持文件通用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1876142/