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

rol*_*dow 6 git composer-php

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

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

所以实际上我想要git:

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

Mat*_*nry 5

merge虽然我确实倾向于同意您描述的特定场景可能表明您的开发过程存在更深层次的问题,但通过将相关文件的属性设置为两个值之一,可以使 git 轻松地完成您所要求的操作。从 的“执行三向合并”部分来看git help attributes,它们是:

merge未设置

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

要建立这一点,请执行以下操作:

echo "composer.json -merge" >> .gitattributes
Run Code Online (Sandbox Code Playgroud)

merge=binary

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

要建立这一点,请执行以下操作:

echo "composer.json merge=binary" >> .gitattributes
Run Code Online (Sandbox Code Playgroud)

两者行为相同

这些描述并没有真正清楚地说明行为有何不同,事实上,经过测试,它们都会产生以下输出:

$ 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")
Run Code Online (Sandbox Code Playgroud)

因为你想要的语义不一定是声明这个文件是二进制的,而只是告诉 git 不要自动合并它,-merge似乎稍微更可取。