我一直在寻找一种方法将分支合并到另一个分支而不覆盖image&css文件夹。我在SO附近查了一下,发现了一些问题和答案,提到了.gitattribute。
我还检查了官方文档。
但我必须遗漏一些东西,因为每次我尝试进行合并(在我已经替换图像的两个分支之间),我会发生合并冲突。
作为参考,这是我的.gitattributes文件,包含在两个分支中:
/res/icon/ merge=ours
/res/screen/ merge=ours
/platforms/ merge=ours
/www/assets/css/ merge=ours
/www/background_splash.png merge=ours
/www/bglogin.png merge=ours
/www/top_bar.png merge=ours
我在这里错过了什么吗?谢谢。
另外,我还有另一种选择吗?
如果你想要res/icon
中的所有文件,你需要:
/res/icon/* merge=ours
(如果没有子目录)或:
/res/icon/**/* merge=ours
(如果有子目录)。对所有目录重复此模式。
但请注意,有一个缺陷:ours
合并驱动程序仅在有东西要合并时使用。也就是说,假设有一个名为res/icon/foo.img
的文件。在合并基础提交中,这是Base的字母B的图像。在你的分支中,这仍然是字母B的图像,与原始文件一点一点地相同。在它们的分支中,这是一个不同的图像,或不同的颜色,或其他什么,因此文件不是逐位相同的。
运行git merge theirs
,你的Git会将res/icon/foo.img
中的基数B与你的B进行比较,看看它们是相同的,将基数B与它们的图像进行比较,看它们是不同的,并选择它们的文件,因为没有什么可以解决的。
如果您确实以任何方式更改了文件,Git会将基本res/icon/foo.img
B与您的res/icon/foo.img
文件进行比较(也许您的B现在是不同的颜色)。 Git将基数B与其文件进行比较。你和他们都有变化,所以要结合不同的变化。现在Git将使用你的merge=ours
驱动程序来实现组合。
(Git可能应该有一个标志,“必须始终使用合并驱动程序”或其他类似的,强制它使用你的驱动程序,即使Git认为没有组合的变化。但是Git今天没有这样的标志。)