只有在解决方案编译成功并成功构建时才应提交? “中途”提交是否可以在非常大的变化中被接受,这使得代码无法工作,几个小时?
答案 0 :(得分:10)
是的,这是可以接受的。
版本控制用于版本控制;不备份。你应该有一些独立的东西来处理可编译代码的备份,这些备份可能确实绕回到版本控制系统。
强制开发人员等待签入代码的方式某些时候即将发生的代码丢失。
答案 1 :(得分:5)
确保代码不会长时间不间断是continuous integration的工作,而不是版本控制。
答案 2 :(得分:5)
除了Brian和Aaron的评论之外,我只想补充说,即使在稳定性和最新代码之间进行这种权衡也可以通过分支来缓解,或者作为一种更极端的解决方案,可以像Git这样的分散系统。 “经常提交并让构建机器人发现错误”是我最喜欢的策略,但是如果你需要一个更稳定的地方来检查代码,那么分支就是你想要的(当然有人必须维护它)。
答案 3 :(得分:3)
在我看来,这取决于所使用的VCS的类型:
由于您标记了 svn 的问题,请按照Aaron。
答案 4 :(得分:1)
根据我的经验,至少尝试不提交重大更改非常重要。如果团队规模更大,或者发展速度更快,那就更是如此。我们的想法是,团队的所有成员都能及时了解最新的变化。 团队成员每次提交后都没有人害怕做svn update
。
如果最新版本经常出现编译错误,则无法进行此操作。即使是失败的测试也会令人烦恼,因为要确定问题是由未提交的更改引起的,还是由svn update
刚收到的更改引起的,并不总是很容易。当每个人都试图弄清楚为什么突然事情不再起作用时,工作就会停止。
突破性更改也会影响您bisect the source code history的能力。因此,即使您单独工作或在功能分支上工作,避免它们仍然是有价值的。
避免破坏更改的策略不必与常规的小提交相矛盾。几乎总是可以将大的更改拆分为一个较小的任务列表,每个任务都可以使用不会破坏构建的适度大小提交来完成。这具有减少冲突的附加优点。我倾向于将这样的事情放在我的提交消息中,用于执行如此小的任务:
- 修复 xyz :在 aspect foo
的预制中重构 fuzz- 修复 xyz : aspect foo 现在有效
- 修复了 xyz :方面栏现在正常工作