替代 .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 今天没有这样的标志。)
我一直在寻找一种在不覆盖图像和 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 今天没有这样的标志。)