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

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

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


当前回答

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

其他回答

我也喜欢在完成一大块工作后做出承诺,通常一天要做好几次。我认为在小提交中比在大提交中更容易看到发生了什么。如果担心提交太多,可以考虑创建一个分支,并在整个特性完成后将其合并回主干。

这里有一篇相关的博客文章:编程的恐惧:尽早检查,经常检查

每当我对编译和运行的代码进行“全面思考”时,我都会签入。这通常会持续15到60分钟。有时它可能会更长,但我总是尝试签入如果我有很多代码更改,我不想在失败的情况下重写。我通常也会确保我的代码被编译,并且在下班回家前检查。

我不会担心提交/签入“太多”。当您不得不重写某些内容时,这真的很糟糕,并且能够以小增量回滚以防万一是很好的。

我使用的经验法则是签入,当签入的文件组可以被单个签入注释覆盖时。

这通常是为了确保签入是原子的,并且注释可以很容易地被其他开发人员消化。

当您的更改影响到具有应用程序范围的配置文件(例如spring上下文文件或struts配置文件)时,情况尤其如此。如果您在签入之前做了几个“组”的更改,它们的影响在配置文件中会重叠,导致两个组彼此合并。

每次我完成一项任务时,我都会做出承诺。这通常需要30分钟到1小时。

我喜欢每30-60分钟提交一次更改,只要它编译干净,并且在单元测试中没有回归。