Git从不(自动)合并composer.json

时间:2014-02-17 10:34:45

标签: git composer-php

我想避免git自动合并我的composer.json。这样我可以在开发分支中使用一个使用dev-develop包的composer.json,而master中的那个只使用dev-master包。

我可以使用两个composer.json文件作为建议here,但我担心我最终会忘记在我的composer.json中为master添加一个bundle。特别是在自动化任务时,这可能会导致灾难。

所以实际上我想要git:

  • 合并composer.json时总是冲突,所以我可以在投入分支之前手动编辑它。
  • 只根据行数合并..所以如果添加/删除一个包,行数会改变,那么它应该合并,冲突,等等。如果一行的内容发生变化,则可能会忽略..

1 个答案:

答案 0 :(得分:3)

虽然我确实倾向于同意您描述的特定方案可能表明您的开发过程存在更深层次的问题,但可以通过在文件上设置merge属性来轻松地执行您要求的操作。问题是,两个值中的一个。来自"执行三向合并" git help attributes的部分,它们是:

merge未设置

  

将当前分支中的版本作为暂定合并结果,并声明合并存在冲突。这个   适用于没有明确定义的合并语义的二进制文件。

要确定这一点,请执行:

echo "composer.json -merge" >> .gitattributes

merge=binary

  

将分支中的版本保留在工作树中,但保留路径处于冲突状态以供用户进行整理。

要确定这一点,请执行:

echo "composer.json merge=binary" >> .gitattributes

两者表现相同

这些描述并未真正说明行为会有何不同,事实上,在测试时,两者都会产生此输出:

$ git merge develop
warning: Cannot merge binary files: composer.json (HEAD vs. develop)
Auto-merging composer.json
CONFLICT (content): Merge conflict in composer.json
Automatic merge failed; fix conflicts and then commit the result.

$ git status
On branch attr-test-2
You have unmerged paths.
  (fix conflicts and run "git commit")

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        both modified:      composer.json

no changes added to commit (use "git add" and/or "git commit -a")

由于你想要的语义不一定要声明这个文件是二进制文件,而只是告诉git不要自动合并它,-merge似乎有点优先。