如何创作不易发生合并冲突的更改?

Posted

技术标签:

【中文标题】如何创作不易发生合并冲突的更改?【英文标题】:How can I author changes that are not prone to merge conflicts? 【发布时间】:2009-08-07 15:31:31 【问题描述】:

自动合并并不完美。没有行编辑冲突并不意味着没有句法冲突,也不意味着没有语义冲突。

有没有人制定低冲突更改的策略?这是不是 TDD 或其他方法的问题(当然 TDD 会帮助捕获它们,但它实际上会阻止)吗?

【问题讨论】:

【参考方案1】:

我一直发现我的提交越小,它们发生合并冲突的可能性就越小。遇到大问题的人似乎总是会花上几天的时间来解决问题,然后尝试一次将它们全部合并。

现在我在一个 2 人团队中工作,我们一直在同一个代码库中工作。我们每个人都在个人分支中工作,然后在有工作时集成到共享分支中。这通常是一天几次。我们几乎从来没有发生过合并冲突,而且当我们这样做时,它们是非常微不足道的。

所以...经常从存储库中获取最新代码。在您自己的分支中工作,这样您就可以提交您的更改并合并其他人的工作,而不会影响团队的其他成员。然后尽可能频繁地将您自己的代码推送到共享分支,以便尽可能减少更改。

另外,请与您的团队交谈。如果您知道其他人正在处理特定文件,您可能希望等到他们完成工作后再加入。有时您情不自禁,但沟通至少可以让您计划复杂的合并,而不是被惊讶。

【讨论】:

【参考方案2】:

违反single responsiblity principle 的类最难合并。找到一个难以合并的类可能表明它需要重构,可能是在更多部分的方向上。

【讨论】:

很难始终保持这种平衡,尤其是在功能逻辑耦合的情况下。 我认为这是相当务实的建议。不要为“可合并性”而设计,您可能不需要它。但如果合并很痛苦,那就重构吧。 是的,这样更容易下咽。【参考方案3】:

首先,您的代码库应该是模块化的。其次,您需要的是与团队其他成员的沟通。每个人都应该知道谁在做什么。如果内部 API 发生变化,应该向整个团队说明。

此外,在提交之前,请始终获取最后一个版本,如果需要复杂的合并,请在本地进行。

这确实是人为问题,而不是技术问题。源代码控制不会取代适当的沟通渠道。您的项目经理应该掌握每项变更,并且他应该意识到变更何时会涉及多个人。

另外,需要常识。 :)

当然,单元测试对于捕捉合并时可能出现的最难以捉摸的错误很有帮助。

【讨论】:

这是一个非常蹩脚的答案。我经常和我的团队交谈。我们的代码库是模块化的。我们知道何时有人更改 API。 这是一个蹩脚的答案。哪个团队不沟通这些事情?什么理智的 VCS 不会让你在本地合并?谁没有常识——这就是它的定义。为什么不直接说“是的,TDD 有帮助,因为当存在语义问题时,单元测试会使构建失败”?因为你不知道在哪里加粗? 有些人认为VCS是通信的替代品。如果您认为这是不可能的,请查看thedailywtf.com。【参考方案4】:

与您的开发人员同行交流,并尽可能避免同步编辑同一代码块。拥有良好的模块化架构(小类、解耦的功能)几乎让这一切成为可能。

如果我们确实发生了冲突,我们通常会通过转而为未经测试的代码编写单元测试几分钟来解决它。

【讨论】:

以上是关于如何创作不易发生合并冲突的更改?的主要内容,如果未能解决你的问题,请参考以下文章

在拉取期间解决 Git 合并冲突以支持其更改

在 Git 中合并但覆盖更改

合并没有空格冲突

git合并壁球和反复发生的冲突

使用正则表达式自动合并

Git:合并期间的其他更改而没有冲突