假设在某个分支branch-X
上,我添加并提交某个文件foo.txt
,并且除了branch-X
之外,该文件不会被回购中的任何其他分支跟踪
我想告诉git
,只要branch-X
合并到存储库中的任何其他分支,就永远不应添加文件foo.txt
。< / p>
我尝试过这样做,例如,在相应的.gitattributes
文件中设置以下行
foo.txt merge=ours
...但是每当我运行
时,文件就会不断添加git checkout otherbranch
git merge branch-X
我想这里的问题是没有真正的&#34;冲突&#34;在foo.txt
中的文件branch-X
和&#34;没有文件&#34;之间在otherbranch
,所以合并策略不需要发挥作用。 (顺便说一句,这就是为什么这个问题不重复,AFAICT:我发现的所有相关问题都是指两个分支中存在冲突文件的情况合并的问题,这些问题的答案似乎不适合我在这里提出的案例。)
此外,至少在合并是快进的情况下,没有进行新的提交,因此希望运行带有git-merge
选项的--no-commit
没有用处明确从索引中删除foo.txt
。
我想我在这里尝试做的机制需要翻译命令
git merge branch-X
进入序列
git branch branch-X-no-foo branch-X
git checkout branch-X-no-foo
git rm foo.txt
git commit -m 'pay no attention to the man behind the curtain...'
# or maybe
# git commit -C HEAD --amend
git checkout otherbranch
git merge branch-X-no-foo
我想我可以编写一个脚本来将这个序列包装成一个易于输入的命令,但我想我会问是否有更好的方法。
答案 0 :(得分:1)
避免必须处理合并驱动程序的一个实际解决方法是:
foo.txt.tpl
模板文件foo.txt.values
,包含右分支的值请参阅此example of content filter driver:
(来自Customizing Git Attributes的“Git Book”图片
这样,您根本不需要处理合并。