.gitattributes 合并我们的 trow 合并冲突

.gitattribute merge ours trow merge conflict

我有分支 masterdevelop

master 分支包含:

  1. dist/app.js
  2. dist/app.polyfill.js

develop 分支包含:

  1. dist/app.js

.gitattributes 文件包含:

dist/* merge=ours

$ git config merge.ours.driver true - 使用


当我尝试将 master 合并到 developdist/app.js 合并时没有冲突,但是 dist/app.polyfill.js合并错误.

我做错了什么?


合并错误

CONFLICT (modify/delete): dist/app.polyfill.js 在HEAD中删除,在682c04bb6342e545f70a5e936413904a0d57156b中修改。 dist/app.polyfill.js 的版本 682c04bb6342e545f70a5e936413904a0d57156b 留在树中。 自动合并 dist/app.js 自动合并失败;修复冲突,然后提交结果。

首先,这不是有效的合并驱动程序配置。合并驱动程序配置应该采用具有百分比模式的多个参数,并在 %A 指定的文件中产生结果。你的不会那样做;它完全有效(如果有效)纯属运气。

您在这里看到的另一个问题是您的驱动程序仅影响 Git 在需要执行 file-level 合并时所做的事情,而不影响某些其他类型的冲突,例如modify/delete 冲突已处理。来自 gitattributes(7) 手册页(强调我的):

The attribute merge affects how three versions of a file are merged when a file-level merge is necessary during git merge, and other commands such as git revert and git cherry-pick.

在这种情况下,您有冲突,因为一方修改了文件而另一方删除了文件。 Git 确定不需要发生 file-level 合并,因为 modify/delete 情况总是冲突,所以它没有调用您的驱动程序,只是放弃了。请注意,删除的文件与空文件有质的区别;后者会合并,前者不会。

根据您的目录名称,听起来您可能正在存储库中存储构建工件。如果是这样,通常不鼓励这样做,因为正如您所注意到的,它们不能很好地合并,而且它们往往会使存储库膨胀。您最好使用工件服务器,例如 Artifactory,或者如果它存储在 GitHub 上,则发布资产作为 GitHub 发布的一部分。