最近,我参与了有关如何处理重构的讨论(这本身就是一个有趣的话题)。最终提出了以下问题:
一个人如何处理由于某人对一部分代码进行重构而其他人在为同一段代码开发功能时发生的合并冲突呢?
基本上,我不知道如何有效地处理这一问题。在这方面是否应遵循任何最佳做法?对于具有大量旧代码的系统,应该如何处理呢?
最近,我参与了有关如何处理重构的讨论(这本身就是一个有趣的话题)。最终提出了以下问题:
一个人如何处理由于某人对一部分代码进行重构而其他人在为同一段代码开发功能时发生的合并冲突呢?
基本上,我不知道如何有效地处理这一问题。在这方面是否应遵循任何最佳做法?对于具有大量旧代码的系统,应该如何处理呢?
Answers:
好问题。我能想到的最佳策略是:
持续集成和经常进行少量重构(而不是偶尔进行大量重构)的结合将大大减少此类冲突的成本和频率。
我想回答您的问题,首先我们必须了解为什么会发生冲突,合并的真正含义和过程是什么?
冲突只有当两个或多个开发人员在工作发生相同的文件在同一时间,然后他们都试图检查。第一个开发者不会得到任何冲突,当然。但是第二个(第三,第四等等)会发生冲突。为什么,因为他的某些代码与服务器上的现有代码部分或完全不同。
本质上,这意味着第二位开发人员与第一位开发人员的想法有所不同。这种差异可能会因样式不同而有所不同,例如使用new UserManager().GetUserName()
而不是使用UserManager userManager = new UserManager(); userManager.GetUserName();
您提到的级别,这意味着两个开发人员对于如何重构代码进行改进都有不同的想法。
另一方面,合并并不意味着开发人员可以在不考虑冲突的情况下检入其代码。他们应该而且必须解决这些冲突。如果冲突不重要,则它们可以签入并覆盖以前的代码。但是,当他们看到完全不同的事物时,应该致电前一位开发人员,并与他交谈,以便他们可以相互协调,以签入最佳解决方案。
例如,如果您要求两个开发人员改进在线支付库,并且他们的工作重叠,这意味着至少在某些地方,有2种不同的解决方案。因此,应该讨论并接受其中一种解决方案,作为更好的解决方案。
我不同意防止出现这种情况,因为我们应该比理论上更加真实。有时候,一个人真的很擅长CSS,而另一个人真的很擅长ASP.NET Markup。但是当他们俩都应该在登录页面上进行工作时,他们的工作可能会发生冲突。我的意思是,如果我们认为真实的(不理想的),我们可以看到很多次发生这种现象(冲突)。
我只想提及的另一点是,使用工具来帮助您办理入住手续。这些工具通常可视化服务器代码和开发人员代码的区别,并在确定应检入哪个部分方面有很大帮助。
如果没有积极的任务管理,那么您就有冲突。
但是,如果您每天有一个站立会议或一位经理,则不可能出现此问题。
谈话(通过每天站起来)或与经理谈话。
说话可以避免这种情况。