版本控制最佳实践

时间:2010-01-03 18:47:06

标签: version-control mercurial

前几天我刚刚转向版本控制,在经历了Subversion的糟糕体验后,我转而使用Mercurial,到目前为止我很满意。

虽然我理解并欣赏版本控制的想法,但我对它没有任何实际经验。

现在,我正在使用它来处理我正在处理的几个网站,并且想到了几个问题:

  • 我应该多久/多久一次?经过任何重大改变后,是否有效?我什么时候做完了?只有当它到达下一个稳定的迭代时?任何错误修正后?
  • 当我想改变菜单的布局,然后合并回来时,我会分支吗?
  • 我应该分支吗?在分支,然后合并回来,克隆存储库并将其拉回来之间有什么区别(仅限我,一个单独的开发人员)?

版本控制新手的其他任何建议?


到目前为止,每个人都给了我很好的建议,但非常注重团队精神。我想澄清一下:

目前,我只是在我做的一些网站上使用VC。不是完全自由职业的工作,但出于VC的目的,我是唯一一个真正触及网站代码的人。

此外,由于我在网站上使用PHP,因此无法进行编译。

这会显着改变您的答案吗?

7 个答案:

答案 0 :(得分:25)

答案 1 :(得分:9)

这些是我遵循的做法

  • 每个提交都应该有意义:一个错误修复(或一组相互关联的错误),一个(小)新功能等。这个想法是,如果你需要回滚,你的回滚就会落在明确定义的“边界”

  • 每次提交都应该有一个很好的信息来解释你提交的内容。真的养成这个习惯,你以后会感谢自己。不必冗长,一些句子可以做。如果您使用的是错误跟踪系统,那么将错误号与您的提交相关联也非常有用

  • 现在我使用git和分支是如此快速和便宜,我倾向于为我即将实现的每个新功能创建一个新的分支。我甚至从未考虑过为许多其他VCS做这件事。所以分支取决于您使用的系统,您的代码库,您的团队等,那里没有硬规则。

  • 我更喜欢始终使用命令行并直接了解我的VCS命令。基于GUI的前端可能导致的断开连接可能是一种痛苦,甚至是破坏性的。控制源代码非常重要,值得深入了解并直接进行。但这只是我的偏好。

  • 备份您的VCS。我使用Time Machine备份我的本地存储库,然后我推送到服务器上的远程存储库,并且该服务器也被备份。 VCS本身并不是一个“备份”,它可以像其他任何东西一样下降。

答案 2 :(得分:2)

当我完成一项工作并且只有它工作时,我才会承诺。提交到其他人使用代码的地方是不好的做法。

分支是人们会争论的东西。有些人说从来没有分支,只是有开关来获得有效的工作。做你觉得更舒服的事情,但不要因为你可以分支。当我正在进行大量的工作时,我使用分支和分支,如果我意外地提交了破坏的代码,它不会影响其他人。

答案 3 :(得分:2)

  

我应该多久/多久一次?

你可能会在这个问题上得到许多相互矛盾的答案。我的观点是你应该在工作时提交更改,每个提交(或签入)应该只包含一个“编辑”。 “编辑”是一组原子变化,它们共同修复错误或实现新功能。

有一种理论认为,即使它不起作用,您也应该每隔几个小时检入一次代码,但在这种情况下,您需要在自己的分支上工作 - 您不希望将损坏的代码检入到您的代码中主线,或共享分支。

每晚检入的好处是您有备份(假设您的存储库位于不同的计算机上)。

至于分支:

  • 你的主线应该包含始终正常工作的代码。
  • 您应该拥有一个包含最新代码的当前开发分支。如果您对此感到满意(并且已通过所有测试),您应将其合并回主线。
  • 您可能需要包含上次发布版本的分支。这可以用于测试/调试错误和释放补丁(在极端情况下)。

答案 4 :(得分:2)

  • 每次提交前更新
  • 提供提交评论
  • 完成后立即提交
  • 不提交使存储库中的代码无法编译或错误的任何内容
  • 每天早上更新
  • 如果有重要的事情需要更新,有时会与同事进行口头沟通
  • 提交与一件事完全相关的代码(即修复错误,实现功能)
  • 不要担心提交非常小的提交,只要它们符合之前的规则

顺便问一下,Subversion的糟糕体验是什么?

答案 5 :(得分:1)

问:我应该多久/多久一次?经过任何重大改变后,是否有效?我什么时候做完了?只有当它到达下一个稳定的迭代时?任何错误修正后?

答:每当你感觉舒服时,我会在工作单元完成并工作后立即提交(这并不意味着必须完成完整的任务)。但你不应该提交一些不能编译的东西(可能会抑制团队中的其他人,如果有的话)。此外,如果在完成之前有必要实施快速修复或小更改,则不应将不完整的内容提交到主干。

问:当我想改变菜单的布局,然后合并回来时,我会分支吗?

答:只有在完成任务之前您可能需要实施快速修复或小改动。

分支的好处在于,您在分支中执行的所有提交仍可供将来参考(如有必要)。它也比克隆回购更简单,更快,我想; - )

答案 6 :(得分:1)

我同意其他人的提交时间。

关于分支,我通常只在处理破坏其他人正在做的事情或者需要在已经有不应该进行生产的变更的文件中生成补丁时进行分支。如果您只是一个开发人员,那么第一个方案并不真正适用。

我使用标签管理版本 - “生产”标签始终与当前产品代码相关联,每个版本都标有“release-YYYYMMDD”。这允许您在必要时回滚。