606
社区成员




原文地址
书中11.5.4中提到了代码签入过程中的种种冲突问题,最后给出的解决方案是对不同的代码实行不同的规则和流程控制,并给出了例子。但是,我仍然没能看出来这样如何解决了问题。在我的开发实践中,我曾见过两位同学针对4个issue同时对代码进行修改,然后merge冲突,花费了很长时间,经历多次merge/rebase才成功合并。这还仅仅是两位同学,发现问题后一起合并的结果。在软件公司,一份代码同时修改的人相比更多,冲突也更多。我觉得即使如书中一样限定在一个固定的时间段签入代码,仍然会发生冲突。
我目前能想到的解决办法就是,将构建过程自动化,只允许能通过构建的代码签入。这样可以保证签入不会导致构建失败,可以省去“合并版本后构建并测试”的时间,减少冲突的可能性。但是这并没有解决代码冲突频繁的问题,且在项目工程庞大的情况下,自动构建和测试也要花费大量的算力和时间,因此希望与大家讨论。
Jetbrain的编辑器有Code With Me 的功能可以同步查看代码的更新
Visual Studio / Visual Studio Code 有Live Share功能可以同步查看代码的更新
这一点是我一开始的理解存在一定问题,规范的流程指严格规范向主分支的合并,如果不做这一点问题主分支上会产生无法通过构建的代码。而我接触的项目完全都是保证向主分支的合并修改具有原子性的。同时我个人强烈赞成此种做法,主分支上本就不应存在无法通过构建的Commit。
当然,这就属于严格流程控制的例子,会导致有人一直无法签入,这需要主管Merge的人手动控制,也可以通过VCS的相关功能(如Merge结果自动测试)来保证合并进度。针对书中果冻的邮件,就可以通过自动化测试来解决,同时手动提高他的合并优先级。
此外真实开发后发现,只要模块划分合理,不要有两个人同时工作在同一个文件上,每次先pull,就能有效避免冲突,使冲突只发生在部分容易解决的全局配置文件上。
最后,原文例子里可能是大家不会用git花的时间才那么多(