【问题标题】:Git never (auto) merge composer.jsonGit 从不(自动)合并 composer.json
【发布时间】:2014-04-17 10:58:05
【问题描述】:

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

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

所以实际上我希望 git 可以:

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

【问题讨论】:

  • 包含分支被认为是一种不好的做法,尤其是没有版本的分支。尽可能包含版本。这将消除维护composer.json 的两个版本的需要,因为您的两个分支所需的版本约束将是相同的。
  • @thecatontheflat 没有合并冲突,它会合并就好了。这实际上是我的观点:我想强迫冲突。
  • @sven 这主要用于我自己的包,由 satis 维护。我想在我的登台服务器上检查我的开发分支。一切顺利后,我将合并到master,并继续在生产环境中发布代码。为什么这么糟糕?
  • 重新思考您的开发过程。如果您的主要软件的开发分支依赖于每个库也都在它们的开发分支中,那么您不能真正将这些称为“独立库”,并且您可能不应该将它们分开在不同的存储库中。另一方面,如果您将库视为独立软件,则无需依赖它们位于某个分支中,而只需要具有某个版本即可。除非您有意更新,否则发布新版本不会影响主软件(它将继续与旧软件一起使用)。

标签: git composer-php


【解决方案1】:

虽然我倾向于同意您描述的特定场景可能表明您在开发过程中存在更深层次的问题,但可以通过在相关文件上设置 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 似乎稍微好一点。

【讨论】:

    猜你喜欢
    • 2019-08-29
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    相关资源
    最近更新 更多