我应该多久向源代码控制提交一次更改?在每个小特性之后,还是只在大特性之后?
我正在开发一个项目,有一个长期的功能要实现。目前,我在完成每一大块工作后,即每一个子特性实现和bug修复后提交。我甚至在发现bug后为某些特性添加了一组新的测试之后才提交。
然而,我对这种模式感到担忧。在一个富有成效的工作中,我可能会提交10次。鉴于我使用的是Subversion,这些提交会影响整个存储库,所以我想知道做这么多次是否真的是一个好做法?
我应该多久向源代码控制提交一次更改?在每个小特性之后,还是只在大特性之后?
我正在开发一个项目,有一个长期的功能要实现。目前,我在完成每一大块工作后,即每一个子特性实现和bug修复后提交。我甚至在发现bug后为某些特性添加了一组新的测试之后才提交。
然而,我对这种模式感到担忧。在一个富有成效的工作中,我可能会提交10次。鉴于我使用的是Subversion,这些提交会影响整个存储库,所以我想知道做这么多次是否真的是一个好做法?
当前回答
我也喜欢在完成一大块工作后做出承诺,通常一天要做好几次。我认为在小提交中比在大提交中更容易看到发生了什么。如果担心提交太多,可以考虑创建一个分支,并在整个特性完成后将其合并回主干。
这里有一篇相关的博客文章:编程的恐惧:尽早检查,经常检查
其他回答
正如其他人所说的,尝试提交一个足够“完整”的逻辑块,它不会妨碍其他开发人员(例如,它构建并通过自动化测试)。
每个开发团队/公司必须为每个分支定义什么是“足够完整”的。例如,你可能有只需要代码来构建的功能分支,也需要代码来通过自动化测试的Trunk,以及表明某些东西已经通过QA测试的标签……或者类似的东西。
我并不是说这是一个好的模式;我只是想指出,如何“完成”取决于你的团队/公司的政策。
我也喜欢定期检查。那就是每次我都朝着我的目标迈进了一步。
这通常是每隔几个小时。
我的困难是找到一个愿意并且能够执行这么多代码审查的人。
我们公司的政策是,在签入任何东西之前,我们需要进行代码审查,这是有道理的,但在部门中并不总是有人有时间立即执行代码审查。可能的解决方式:
每次签入需要更多的工作;更少的签到=更少的评论。 改变公司签到政策。如果我刚刚做了一些重构,单元测试全部运行绿色,也许我可以放松规则? 搁置变更,直到有人能够执行评审并继续工作。如果审阅者不喜欢你的代码,你就必须重新设计,这就会产生问题。通过“搁置”更改来处理任务的不同阶段可能会变得混乱。
如果您正在进行重大更改,并且担心会影响其他使用代码的人,那么您可以创建一个新的分支,然后在更改完成后合并回主干。
我使用的经验法则是签入,当签入的文件组可以被单个签入注释覆盖时。
这通常是为了确保签入是原子的,并且注释可以很容易地被其他开发人员消化。
当您的更改影响到具有应用程序范围的配置文件(例如spring上下文文件或struts配置文件)时,情况尤其如此。如果您在签入之前做了几个“组”的更改,它们的影响在配置文件中会重叠,导致两个组彼此合并。
每天至少一次。