我有一个主人和我的(网络)应用程序的测试分支 . 这些项目几乎相同,只有一个设置应用程序的文件,比如说“setup” .
每当我将一个分支合并到另一个分支时,我希望该分支保持其版本的设置 . 也就是说,git不应该尝试将更改合并到该文件 .
我按照guidance from the Pro Git book创建了一个.gitattributes文件,行"setup merge=ours" . 但是,这不起作用 - 如果我引入冲突,也不能快速合并 .
(确切地说:
$: mkdir gitest
$: cd gittest
$: git init
$: echo "setup merge=ours" >> .gitattributes
$: echo "master" >> setup
$: git add setup .gitattributes
$: git commit -a -m ...
$: git branch test
$: git checkout test
$: echo "test" >> setup
$: git commit -a -m ...
$: git checkout master
$: git merge test
预期结果:setup包含单词“master”,而git执行ff merge并且setup是“test” . )
4 回答
我有同样的错误,只需在.git / config中定义一个“我们的”合并驱动程序即可解决:
由于true始终返回0,因此保持当前状态的临时文件不会更改,并将保留为最终版本 .
您可以在此处阅读有关合并驱动程序的更多信息:http://www.kernel.org/pub/software/scm/git/docs/gitattributes.html#_defining_a_custom_merge_driver
附录:
这在驱动程序实际被调用的任何时候都有效,并且这似乎只在提交更改相同文件时发生(git merge属性) . 如果单个分支中有更改,则不会调用驱动程序 .
我发现如果我修改了两个分支上的文件并将修改提交到每个分支,然后尝试了合并,它将调用合并驱动程序并收听我指定
merge=ours
的.gitattributes
. 在此之后,两个分支上的两个文件总是不同,因此将始终调用合并驱动程序,因此我不需要具有触及该文件的自定义合并驱动程序 . 只需要最初修改两者 .合并驱动程序仅在非平凡情况下调用,即如果master和test都触及设置(并且您需要首先定义合并驱动程序
ours
):话虽如此,我想知道在存储库中设置是否合理是明智的 . 如果您真的希望它在版本控制下,您可以使用子模块或子树合并策略来保持公共文件同步 .
涂抹干净的脚本而不是单独的分支 . 根据您所使用的计算机,脚本可能会有所不同 .