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

时间:2020-09-04 16:15:49

标签: git gitattributes

我有分支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合并到develop时, dist / app.js 被合并而没有冲突,但是 dist / app.polyfill.js 合并错误。

我做错了什么?


合并错误

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

1 个答案:

答案 0 :(得分:1)

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

您在这里看到的另一个问题是,驱动程序仅会影响Git在需要执行文件级合并时所执行的操作,而不会影响某些其他类型的冲突(如修改/删除冲突)的处理方式。在gitattributes(7)手册页中(重点是我):

属性merge影响在git合并期间需要文件级合并的情况下如何合并文件的三个版本,以及其他命令,例如git revert和git cherry-pick

在这种情况下,您会发生冲突,因为一方修改了文件,而另一方删除了该文件。 Git确定不需要进行文件级合并,因为修改/删除情况始终是冲突,因此它没有调用您的驱动程序而只是放弃了。请注意,已删除的文件在质量上与空文件不同;后者会合并,但前者不会合并。

基于目录的名称,听起来您可能正在将构建工件存储在存储库中。如果是这样,通常不建议这样做,因为正如您所注意到的,它们合并得不好,并且它们往往会使存储库膨胀。您最好使用Artifactory之类的工件服务器,或者如果该工件存储在GitHub上(作为GitHub版本的一部分)则是发行资产。

相关问题