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

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

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


当前回答

每天至少一次。

其他回答

正如其他人所说的,尝试提交一个足够“完整”的逻辑块,它不会妨碍其他开发人员(例如,它构建并通过自动化测试)。

每个开发团队/公司必须为每个分支定义什么是“足够完整”的。例如,你可能有只需要代码来构建的功能分支,也需要代码来通过自动化测试的Trunk,以及表明某些东西已经通过QA测试的标签……或者类似的东西。

我并不是说这是一个好的模式;我只是想指出,如何“完成”取决于你的团队/公司的政策。

如果您正在进行重大更改,并且担心会影响其他使用代码的人,那么您可以创建一个新的分支,然后在更改完成后合并回主干。

我也喜欢定期检查。那就是每次我都朝着我的目标迈进了一步。

这通常是每隔几个小时。

我的困难是找到一个愿意并且能够执行这么多代码审查的人。

我们公司的政策是,在签入任何东西之前,我们需要进行代码审查,这是有道理的,但在部门中并不总是有人有时间立即执行代码审查。可能的解决方式:

每次签入需要更多的工作;更少的签到=更少的评论。 改变公司签到政策。如果我刚刚做了一些重构,单元测试全部运行绿色,也许我可以放松规则? 搁置变更,直到有人能够执行评审并继续工作。如果审阅者不喜欢你的代码,你就必须重新设计,这就会产生问题。通过“搁置”更改来处理任务的不同阶段可能会变得混乱。

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

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

每天至少一次。