DVCS - 提交更改的频率和时间

时间:2009-09-26 07:59:26

标签: dvcs commit

StackOverflow上还有另一个thread,用于处理对源代码控制进行更改的频率。我想把它放在使用像git或mercurial这样的DVCS的上下文中。

  1. 你多久犯下一次?

  2. 您是否只在提交时进行更改 正确构建?

  3. 您推送更改的频率和时间(或提交拉取请求或类似内容)?

  4. 您如何评估开发复杂功能/进行复杂的重构需要触及多个地方?是“私人提交”,不会建立好吗?完成后,您是否也将它们推送到主存储库,或者在推送之前将所有更改捆绑到一个变更集中?

5 个答案:

答案 0 :(得分:14)

这取决于您正在处理的分支(“开发线”)的性质。

这些DVCS(git或mercurial)的主要优点是你可以轻松:

  • 分支
  • 合并

所以:

  

1 /您多久和何时提交?
  2 /您是否只在正确构建时提交更改?

在私人分支上尽可能多的时间(例如,如果它编译) 仅在单元测试通过时才提交的做法是好的,但应该仅适用于“官方”(如“可以发布或'推送'”)分支:在您的私人分支中,如果您合并了gazillon次需要。
唯一的事情是:做一些合并 - 交互式重组你的私人分支上的许多提交,然后在主开发分支上重放它们,你可以在那里通过一些测试。

  

3 /您推送更改的频率和时间(或提交拉取请求或类似内容)?

出版物是另一回事,应该用“清晰”的历史记录(连贯的合并,代表编译并通过一些测试的内容)。
您发布的分支应该是永远不会重写历史记录的分支 出版物的速度取决于远程分支的性质以及拉动该分支的人口的性质。例如,如果是另一支球队,你可以经常推进。如果是系统范围的集成测试团队,那么你的推动次数会少很多。

  

4 /您如何开发复杂功能/进行复杂的重构,需要触及许多地方?是“私人提交”,不会建立好吗?完成后,您是否也将它们推送到主存储库,或者在推送之前将所有更改捆绑到单个变更集中?

请参阅1.和2:在您自己的专用分支中首先进行补丁,然后在官方(已发布)补丁分支上重新组织您的提交。如果补丁涉及多个不同的“活动”(或错误修复),则单个提交并不总是最佳选择。

答案 1 :(得分:5)

我会经常更改我的DVCS(我自己的主题或任务分支),这样我就可以使用它不仅可以“提供更改”,还可以在我工作时帮助我:比如“为什么这样5分钟前工作了,它不再工作了?“如果你经常提交,你可以运行差异。

此外,我发现非常非常好的一种技术是用它来“自我记录重构”。让我解释一下:如果你要在一个主题分支上做一个大的重构,然后整体检查变化(修改了一组很好的文件),你可能会迷路。但是,假设您检查每个“中间步骤”并用注释记录它,那么您正在创建某种关于您自己更改的“电影”,以帮助描述您所做的事情!非常适合评论者。

答案 2 :(得分:4)

我承诺了很多;添加功能甚至重新格式化我的源时。

我使用git并在非共享分支上完成大部分工作。当我添加了足够多的计数为块的更改时,我使用git rebase将较小的相关更改收集到更大的块中并将其提交到主分支。

通过这种方式,我可以使用已提交的代码的所有优点,我可以向后或向前进行,但我不必犯下我的所有错误,也不必为主要历史做出反应。

答案 3 :(得分:1)

  

你提交的频率和时间?

非常频繁。如果我所做的改变工作并构成了一个很好的补丁,它可能会在一小时内达到几次。或者可能是每隔几个小时,这取决于我是否花费更长时间调试事物,或尝试进行有风险的更改。

  

您是否只在正确构建时提交更改?

是的,几乎总是如此。我无法想出检查无法正确构建的代码的正确理由。有很多理由可以检查代码中没有正确运行(在分支中)。

  

您推送更改的频率和时间(或提交拉取请求或类似内容)?

通常仅在功能完成且准备进行集成测试时。这意味着它已通过单元测试和其他相关测试,并且代码/补丁足够干净,我认为它已准备好进行审核。

  

您如何批准开发复杂功能/进行复杂的重构,需要触及许多地方?是“私人提交”,不会建立好吗?完成后,您是否也将它们推送到主存储库,或者在推送之前将所有更改捆绑到单个变更集中?

我会为该功能创建一个命名分支(它可以跨设计文档和问题跟踪系统进行跟踪)。承诺不构建只会在私有分支上作为中间步骤,但仍然是例外。目前我没有将整个功能分支重新绑定并合并为一个变更集,尽管这是我将来要做的事情。只有在通过适当的测试时才会推送更改。

答案 4 :(得分:0)

我遵循这种flow
alt text http://img121.imageshack.us/img121/3272/versioncontrolsysbestpr.png

Here is the original image url

我想这说得很好。基本上我会在实现完整的工作用例/用户故事(取决于您的软件过程)后办理登机手续。最重要的是你签到的东西在他们编译的意义上起作用。永远不会break the build
在每个用户故事/用例之后进行提交的优势在于您可以更好地跟踪过去的版本并撤消更改。