我应该多久向源代码控制提交一次更改?在每个小特性之后,还是只在大特性之后?

我正在开发一个项目,有一个长期的功能要实现。目前,我在完成每一大块工作后,即每一个子特性实现和bug修复后提交。我甚至在发现bug后为某些特性添加了一组新的测试之后才提交。

然而,我对这种模式感到担忧。在一个富有成效的工作中,我可能会提交10次。鉴于我使用的是Subversion,这些提交会影响整个存储库,所以我想知道做这么多次是否真的是一个好做法?


当前回答

我喜欢Jeff Atwood写的这篇小文章:“早报到,常报到”

其他回答

我仍然相信“经常承诺,早承诺”这句话。我更喜欢像Mercurial这样去中心化的风投,提交几件事情并在以后将其推向上游是没有问题的。

这确实是一个常见的问题,但真正的问题是:您能提交未完成的代码吗?

这取决于您的源代码系统和您所拥有的其他内容。如果您正在使用Git,那么每当完成一个步骤时就提交。我使用SVN,我喜欢在完成整个功能后提交,所以,每1到5个小时提交一次。如果我使用CVS,我也会这么做。

我没有每次提交的具体时间限制,我倾向于在测试通过并且我对代码满意的情况下提交。我不会提交无法编译的代码,或者在失败的情况下我不愿意返回的状态

想想看。

(只要你登记的东西是安全的)

我同意其中几个回答:不要签入无法编译的代码;如果您关心的是代码或其更改的“备份”,则使用个人分支或存储库;当逻辑单元完成时检入。

One other thing that I would add is that depending on your environment, the check-in rate may vary with time. For example, early in a project checking in after each functional piece of a component is complete makes sense for both safety and having a revision history (I am thinking of cases where earlier bits get refactored as later ones are being developed). Later in the project, on the other hand, entirely complete functionality becomes more important, especially during integration development/testing. A half-integration or half-fix does not help anyone.

至于每次bug修复后的签到:除非修复是微不足道的,否则绝对如此!没有什么比发现一个签入包含三个修复程序并且其中一个需要回滚更令人痛苦的了。在这种情况下,开发人员在一个区域修复了三个错误,而将哪个更改用于哪个错误修复是一场噩梦。