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



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

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

所以实际上我想要git:

  • 合并composer.json时总是发生冲突,所以我可以在调试到分支之前手动编辑它
  • 仅根据行数进行合并。。因此,如果一个bundle被添加/删除,行数发生了变化,那么它应该合并、冲突等等。如果一行的内容发生变化,它可能会忽略

虽然我倾向于同意您所描述的特定场景可能表明您的开发过程存在更深层次的问题,但通过将有问题文件的merge属性设置为两个值中的一个,git可以很容易地完成您的要求。从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似乎更可取。

相关内容

  • 没有找到相关文章

最新更新