这是你通常使用SVN或GIt的方式吗?

时间:2010-01-21 20:03:12

标签: svn git version-control

在我看到的使用SVN或Git的所有教程中,他们总是向他们展示更新单个文件。我可以在1天内处理100个文件,处理许多文件是正常的,在一天结束时,只需对所有文件进行1次提交,而不是单独执行我修改的每个文件吗?

9 个答案:

答案 0 :(得分:18)

您通常希望将提交分组为逻辑相关的更改,所有更改都包含一条提交消息。

你应该总是提交工作代码;不要做出已完成的一半并打破构建的东西,这也可能会破坏那些试图通过测试旧版本来找出哪个提交引入了错误的人。每个提交都应包含一小组彼此相关的更改。

我不建议将当天的所有更改批量转换为一次提交。如果您需要稍后查看历史记录,如果将一整天的工作一起塞进一个提交中,将很难找到所需的更改。如果您需要还原更改,最好还原整个提交,而不是一次有选择地还原文件。

当然,在某些日子里,你会有一个复杂的变化需要一整天的时间来创造;在这种情况下,如果它是一个逻辑更改,那么在一天结束时进行一次提交。合理,这里没有绝对的规则。

答案 1 :(得分:8)

我通常将其分解为工作单元。如果修改了完成一个工作单元的所有100个文件,则在一天结束时一起检查所有文件。但是你更有可能为一个任务触摸5或10个文件,然后触摸另外20个文件等等。我建议为每个任务执行一次检查。如果没有其他原因,您的签到说明将更准确,更有用。

答案 2 :(得分:3)

我不喜欢每天犯1次。这感觉更像是备份而非源代码控制。

我建议将作为同一任务/错误修正/功能的一部分进行更改的文件一起提交,否则,它们应该是单独的提交。

如果特定日期的所有文件都属于同一个功能,那就没问题了。但是,如果修改的文件用于多个不相关的任务,那么这会使恢复和合并更加复杂。

答案 3 :(得分:3)

这是正常的,但有时较小的提交比仅在一天结束时提交更好。如果您正在与一个大团队合作并且您只在一天结束时提交,则在更新时(提交之前)可能会发生冲突。

当您和您的团队也进行代码审查时,较小的提交会更好。因此,您只提交了5,10个文件,审阅者将更轻松地查看代码。如果您提交100个文件,审阅者将有更多的工作。

答案 4 :(得分:2)

(回答Subversion。)

嗯,通常认为将一组文件作为自包含的“更改”提交是理想的。例如。如果您正在网站上工作并向页面添加新图像,那么您的提交将类似于:

$ svn add header.png
A   header.png
$ svn commit index.html header.png -m "Add new header to main page."
A   header.png
M   index.html
Revision 123 committed.

如果给定的修订对应于单个特征,错误修复或重构(等),它确实使存储库的历史记录更有意义。有两件事需要避免:

  • 修订版中有多个更改。如果你改变其中一个更改的想法,找到它并将其退出并且不影响与其混淆的其他更改会有点棘手。
  • (可能不那么严重?)有几个版本的变化。如果在每次修订后,内容都处于可行状态(这可能意味着可编译且通常对程序正确,或者网站格式正确的HTML),那就太好了。这也意味着很容易针对任何给定的更改进行退出或审核。

我知道很难记住为所有更改做到这一点,而且我犯了一大堆不相关的东西,其中包含“备份misc更改”或同样有用的内容。这些是失误,一两个不伤。但是很高兴看到一个历史记录:“修订版1,实现X(修改A和添加B)。修订版2,修复错误Y(修改C)。修订版3,重构Z(修改D和E并重命名为F)到G)。等等。“

答案 5 :(得分:2)

正如其他人所提到的,最好小批量提交,每批包含一个独立的变更。

但这不仅仅是为了让你的版本控制历史更有用。它还可以提高您的工作质量,特别是如果您将它与详细的提交注释结合起来。

你会发现,在每次提交之前,你需要对你所做的事情进行评估,以便撰写有用的评论。这将引导您思考改变的后果,并且您可能会记住一些您未测试的副作用,或者您需要修复的一些副作用。

此外,它会让您一次专注于一项任务。如果你一次保持头脑中的几十个变化,你最终会忘记一些事情。通过单独提交更改,您将能够专注于每次更改的质量。

答案 6 :(得分:1)

最佳做法是进行原子提交,即实现一次完整修改的提交(理想情况下,允许源树编译)。这经常涉及在一次提交中触摸许多文件。

答案 7 :(得分:1)

这很正常。只需确保代码在提交之前编译。该技术被称为“原子提交”,即AFAIR。它有很多优点:

  • 更小的提交是文件和存储库的更好历史记录
  • 您可以通过还原
  • 来及时确定错误发生时的指定位置
  • 检查单个文件将为您提供有关其历史记录的更多信息。

请注意,在实施VCS的方式中,由于大量提交,对空间消耗的影响很小。

答案 8 :(得分:0)

考虑不同功能/错误的单独分支

除非您编辑的所有文件都属于同一功能或错误,否则您可能需要考虑针对每个错误/功能进行分支。将文件作为一个组(原子)一起提交给每个分支,直到它们完成到足以合并回主干。这避免了文件的经典冲突,这些文件对两个功能进行了修改,并且需要立即释放其中一个。

svn / git使这种分支方式比其他一些版本控制工具更容易。