【发布时间】:2017-11-02 19:39:38
【问题描述】:
我在一个非常大的项目上工作,我们最终决定实施一个通用格式化程序来帮助我们避免合并冲突,并在查看 PR 时获得更好、更清晰的差异(请不要在这方面使用 cmets - 这是不可协商的这点)。似乎只在整个代码库上运行格式化程序并在一次提交/PR 中排除所有格式化会非常好。问题是我们同时有多个版本在进行中。像这样的:
___master_____________________
\
\__release_1_________________
\ \
\__release_2_______\________
请注意从第 1 版到第 2 版的合并。这些合并每周发生一次,并且是需要手动解决的合并冲突的常见来源。如果我们最终格式化所有版本 1 分支,然后尝试将这些更改合并到版本 2,我们假设会有大量的合并冲突。我们已经考虑过解决此问题的一种策略如下:
- 冻结存储库中的所有更改。从第 1 版合并到第 2 版,以便第 2 版与第 1 版的更改保持同步。
- 在版本 1 中进行格式更改。这可能会触及 repo 中的大多数行。提交和 PR 更改。
- 合并从版本 1 到版本 2 的更改。如果有任何冲突,请选择文件的版本 2 版本。
- 对版本 2 中未格式化的任何文件进行格式更改(可能只是新文件或在步骤 3 中存在合并冲突的文件)。提交和 PR 更改。
问题是 - 在我们从版本 1 到版本 2 的定期合并中,这是否可行并最大限度地减少我们的合并冲突?这会导致 Git 丢失共同的祖先信息,从而导致更多的问题吗?
我们的第二个选择是放弃第 1 版并重新格式化第 2 版中的所有内容,但我们认为这将导致对第 1 版所做的任何更改以及未来合并到第 2 版中的一些令人讨厌的合并冲突。
【问题讨论】:
-
您计划将步骤 3 和 4 压缩到同一个合并提交中,还是将它们分开?效果如何? (我们计划在大约 12 个混合功能/发布分支中做类似的事情。)
标签: git merge pull-request git-merge-conflict