【发布时间】:2009-08-07 15:31:31
【问题描述】:
自动合并并不完美。没有行编辑冲突并不意味着没有句法冲突,也不意味着没有语义冲突。
有没有人制定低冲突更改的策略?这是不是 TDD 或其他方法的问题(当然 TDD 会帮助捕获它们,但它实际上会阻止)吗?
【问题讨论】:
标签: version-control merge conflict
自动合并并不完美。没有行编辑冲突并不意味着没有句法冲突,也不意味着没有语义冲突。
有没有人制定低冲突更改的策略?这是不是 TDD 或其他方法的问题(当然 TDD 会帮助捕获它们,但它实际上会阻止)吗?
【问题讨论】:
标签: version-control merge conflict
我一直发现我的提交越小,它们发生合并冲突的可能性就越小。遇到大问题的人似乎总是会花上几天的时间来解决问题,然后尝试一次将它们全部合并。
现在我在一个 2 人团队中工作,我们一直在同一个代码库中工作。我们每个人都在个人分支中工作,然后在有工作时集成到共享分支中。这通常是一天几次。我们几乎从来没有发生过合并冲突,而且当我们这样做时,它们是非常微不足道的。
所以...经常从存储库中获取最新代码。在您自己的分支中工作,这样您就可以提交您的更改并合并其他人的工作,而不会影响团队的其他成员。然后尽可能频繁地将您自己的代码推送到共享分支,以便尽可能减少更改。
另外,请与您的团队交谈。如果您知道其他人正在处理特定文件,您可能希望等到他们完成工作后再加入。有时您情不自禁,但沟通至少可以让您计划复杂的合并,而不是被惊讶。
【讨论】:
违反single responsiblity principle 的类最难合并。找到一个难以合并的类可能表明它需要重构,可能是在更多部分的方向上。
【讨论】:
首先,您的代码库应该是模块化的。其次,您需要的是与团队其他成员的沟通。每个人都应该知道谁在做什么。如果内部 API 发生变化,应该向整个团队说明。
此外,在提交之前,请始终获取最后一个版本,如果需要复杂的合并,请在本地进行。
这确实是人为问题,而不是技术问题。源代码控制不会取代适当的沟通渠道。您的项目经理应该掌握每项变更,并且他应该意识到变更何时会涉及多个人。
另外,需要常识。 :)
当然,单元测试对于捕捉合并时可能出现的最难以捉摸的错误很有帮助。
【讨论】:
与您的开发人员同行交流,并尽可能避免同步编辑同一代码块。拥有良好的模块化架构(小类、解耦的功能)几乎让这一切成为可能。
如果我们确实发生了冲突,我们通常会通过转而为未经测试的代码编写单元测试几分钟来解决它。
【讨论】: