一般如何使用修订控制系统

时间:2011-04-24 22:32:18

标签: git svn version-control revision

我打算创建比之前的项目更大的项目,所以我认为使用像svn或git这样的修订控制系统跟踪所有更改会很好,稍微用新的实验代码中没有风险的功能等等。

现在(除了我是否应该使用svn或git这个问题),我一般都会问自己“如何使用”这样的系统。

到目前为止,我发现词汇如 trunk 标签分支(单词合并经常出现在那种情况下)。但我不确定如何真正与他们合作。 标签似乎是发布版本(如果不是请纠正我),但我不知道 trunk 分支中真正属于什么;何时使用什么等..

在我的研究过程中,我还建议您通常应该为新项目创建一个包含子文件夹分支,标签和主干的文件夹结构。你还推荐这个吗?或者我应该以不同的方式处理项目的源代码?

有人可以试着向我解释一下吗?

4 个答案:

答案 0 :(得分:7)

版本控制系统的主题可能有点太大,无法作为Stack Overflow等Q& A网站的一部分进行教学。你当然欢迎提出有关他们的问题,但“任何人都可以告诉我所有我需要知道的事情”可能不是正确的地方。

如果您对分布式版本控制系统感兴趣,既然您已经提到了git,那么您应该看看hginit.com。虽然该网站描述了Mercurial,但大多数(如果不是全部)也适用于git。

关于创建这些文件夹的建议,完全取决于您决定使用的版本控制系统。

Subversion使用文件夹级“副本”来创建分支。可以认为它同时在磁盘上有多个项目副本,Subversion允许您将更改从一个文件夹合并到另一个文件夹,并跟踪合并的内容,时间和方向。

对于DVCS',这是没有必要的,因为分支是以不同的方式完成的,因此你不需要那些目录。

您列出的词汇可以总结如下(请注意,因为我使用Mercurial,我可能会因为在该系统中的使用而着色):

  • Trunk - 您的主要开发线。如果您没有源代码管理,那么这就是您可以随时工作的地方。
  • 标签 - 标签是一种轻量级标记,可以将其视为一个便条,您可以将其粘贴到项目的某个版本,以便以后可以回答“嗯,我想知道当我发布版本1.0“
  • 时,所有源文件的样子
  • 分支 - 分支是项目的并行Universe副本,可能包含更改。例如,当您发布该1.0版本时,您可能会创建该标记,但您也可能创建一个分支。然后,在trunk上,你将开始使用版本2.0或1.1,如果你需要发布1.0的修补程序来修复bug,你就可以在那个1.0分支上进行修复。
  • 合并 - 当您有多个分支时,您可以要求您的版本控制系统通过合并它们来帮助您将一个分支上的更改完成另一个分支(更改或分支,这与系统不同系统。)
  • 变更集/修订版 - 几乎是同义词,表示您同时提交的一组更改。可能是修复特定错误或添加特定功能。变更集可以包含对许多文件的更改,甚至包含新文件或删除不再需要的文件。

Wikipedia article on Revision control也有很多有用的信息。

Mercurial glossary还列出了相当数量的术语及其在Mercurial中的用法,其中大部分信息适用于许多版本控制系统。


无论如何,这是一个典型的(无论如何)我做项目的方式。

  • 你创建了初始项目存储库,只有主分支(Subversion中的trunk,默认为Mercurial,master?我想在git中)
  • 然后,您开始处理您的项目,并定期提交,构建一个很好的变更集列表
  • 在某些时候,您已准备好发布1.0版,因此您创建了该标记,并在该点创建了一个名为“1.0”的分支,然后您发布了您的软件
  • 然后继续工作,转向版本1.1或2.0,具体取决于
  • 在某些时候,您有一个客户在1.0中找到的错误列表
  • 您修复了trunk / default / master中的那些错误,以便下一个大版本至少有那些错误修正,然后将更改合并回1.0
  • 当修复1.0中的所有已知错误时,将其标记为1.01,然后释放
  • 然后回到2.0工作
  • 当2.0准备发布时,您再次标记和分支等

这只是一种方法,有很多。如果你问他们,人们会告诉你他们的首选方式,我不会说我的方式是正确的。

答案 1 :(得分:5)

您可以开始检查http://www.infoq.com/articles/agile-version-controlhttp://nvie.com/posts/a-successful-git-branching-model/

同样trunk-tag-branch是一个过时的架构,在svn中使用。 DSCM(mercurial,git)对分支和标记具有本机支持,因此您无需显式创建这些目录。

答案 2 :(得分:2)

Lasse V. Karlsen answer上展开一点:

  • 关于学习使用版本控制,您可能应该查看Stackoverflow为您找到的“相关问题”。

    在我看来来自GitHub的Tom Preston-Werner的The Git Parable很好地教导了如何以及为什么应该使用(分布式)版本控制系统(描述如何创建诸如Git 之类的DVCS)。

  • 关于分支模型:如果您使用的版本控制系统支持轻量级分支,并且它可以快速合并分支,您通常使用两种分支在典型的工作流程中:

    • 长寿分支,例如'master'或'main'或'stable'(又名'trunk')当前正在进行新版本的工作,'next'或'devel'或'不稳定'是你进行实验工作的地方,'maint'或'维护'是最后发布的错误修正的地方。
    • 主题分支 - 在开始处理新功能时,最好将其放在单独的短期且通常未发布的分支中。通过这种方式,您可以在不破坏其他工作的情况下处理一些实验性新功能;它允许在许多不相关的功能上并行工作。

HTH

答案 3 :(得分:1)

Subversion Red Bean一书对该主题进行了很好的讨论。

Pragmatic Version Control也是一本好书。