替代 .gitattributes

Alternative to .gitattributes

我一直在寻找一种在不覆盖图像和 css 文件夹的情况下将一个分支合并到另一个分支的方法。我环顾四周,发现了一些提到 .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 的文件。在 merge base 提交中,这是 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 可能应该有一个标志,"merge driver must always be used" 或类似的东西,强制 它使用你的驱动程序,即使 Git认为合并没有变化。但是 Git 今天没有这样的标志。)