我一直在寻找一种在不覆盖图像和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
的文件。 在合并基提交中,这是字母 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 今天没有这样的标志。