如何防止一个分支中的文件在合并期间*添加*到任何其他分支?

时间:2014-04-14 01:08:35

标签: git

假设在某个分支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

我想我可以编写一个脚本来将这个序列包装成一个易于输入的命令,但我想我会问是否有更好的方法。

1 个答案:

答案 0 :(得分:1)

避免必须处理合并驱动程序的一个实际解决方法是:

  • 版本a foo.txt.tpl模板文件
  • 版本a foo.txt.values,包含右分支的值
  • 版本一个脚本能够检测当前分支并在结帐时生成(或不生成,取决于当前分支)正确的foo.txt文件(涂抹脚本)

请参阅此example of content filter driver

enter image description here

(来自Customizing Git Attributes的“Git Book”图片

这样,您根本不需要处理合并。