2011-04-24 84 views
2

我打算创建一个将获得比之前我的项目大一点的项目,所以我认为这将是很好的使用版本控制系统,如SVN或混帐保持跟踪所有变化,在没有风险的代码中使用新功能进行一点点试验等等。如何使用修订控制系统,一般

现在(除了问题,我是否应该使用SVN或GIT),我问自己“怎么用”一般这样的系统。

到现在为止,我发现类似的词汇树干标签分支合并经常出现在这方面的词)。但我不确定如何真正与他们合作。 标签似乎是发布版本(如果不是,请纠正我),但我不知道什么真正属于中继分支;何时使用什么等。

在我的研究中,我还发现,通常应该创建一个文件夹结构,其子文件夹分支,标签和主干的一个新项目的建议。你也会推荐这个吗?还是应该以不同的方式处理项目的源代码?

有人可以试着向我解释这个吗?

回答

7

版本控制系统的话题可能有点过大教为问答&这样的网站堆栈溢出的一部分。当然欢迎您提问关于它们的问题,但“任何人都可以告诉我所有我需要了解的信息”可能不是正确的地方。

如果你有兴趣在分布式版本控制系统,因为你所提到的git,你应该看一看hginit.com。尽管该网站描述了Mercurial,但大部分(如果不是全部)也适用于git。

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

Subversion使用文件夹级别的“副本”来创建分支。把它想象成同时在磁盘上有多个副本,并且Subversion允许你将变化从一个文件夹合并到另一个文件夹,并跟踪你合并了什么,什么时候以及在哪个方向。

对于DVCS”,这是没有必要的,因为分支以不同的方式进行,因此你不需要这些目录。

您列出可以概括如下(注意,由于我使用的水银,我可能会通过它们在该系统中有色)词汇:

  • 干线 - 你的主要发展线。如果你没有源代码管理,那么这就是你一直工作的地方。
  • 标签 - 一个标签是一个轻量级的标记,将其视为一个postit记事,将其粘贴到您的项目的某个版本上,以便以后可以回答问题“嗯,我想知道所有源文件看起来像当我发布版本1.0“
  • 分支 - 分支是您的项目的平行宇宙副本,可能与变化。例如,当你发布1.0版本时,你可能会创建该标签,但你也可以创建一个分支。然后,在主干上,您将开始工作到版本2.0或1.1,并且如果您需要发布修补程序1.0来修复错误,那么您将在该分支上执行这些修复。
  • 合并 - (修改或分支机构,这不同于系统到系统)当你有多个分支,你可以问你的版本控制系统,以帮助您通过将它们合并在一个分支进行到另一个变化
  • 变更集/修订版 - 近似同义词,表示您同时进行的一组更改。它可能是修复一个特定的bug,或添加一个特定的功能。变更集可以包含对许多文件的更改,甚至包含新文件或不再需要的文件删除。

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

Mercurial glossary也列出了Mercurial中相当多的术语及其用法,并且许多版本控制系统中的许多信息都是正确的。


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

  • 您创建初始项目库,只有主分支里(主干线在Subversion中,默认情况下,水银,主人?我觉得在GIT)
  • 然后你开始你的项目中,你经常犯,你建立了一个很好的变更集列表
  • 在某些时候,你准备发布1.0版本,所以你创建了这个标签,并且在那个点上创建了一个名为“1.0”的分支,然后你释放你的软件
  • 然后,您继续工作,朝着版本1.1或2.0,具体取决于
  • 在某些点你有一个1.0客户发现的错误列表
  • 你修复这些错误在trunk/default/master中,以便下一个大版本至少有这些错误修正,然后你将这些修改合并回到1.0
  • 当1.0所有已知的bug已经修复,您标记,作为1.01,并释放
  • 然后再重新打开2.0
  • 工作在2.0准备好释放,你标记和分支再等

这只是一种方法,它有很多。如果你问他们,人们会告诉你他们喜欢的方式,我不会说我的方式是对的。

+0

谢谢你花时间回答:)我并不真的搜索版本控制系统的所有内容很多像堆栈溢出这样的网站;)我只是想知道一些“基础知识”,如干线标签分支的东西(换句话说,一般的开发过程如何);所以有些东西开始“理解”并继续我对这些系统的研究 – tbolender 2011-04-24 22:47:29

+0

我已经编辑了一些更多的细节。请注意,有可能没有正确的方法来做到这一点,但有很多不好的方法可以做到这一点,好的方法以不同的方式很好。我建议你先决定是否要使用集中版本控制系统或分布式版本控制系统(即。Subversion vs. Mercurial/git),然后阅读它们各自的工作方式。细节决定成败。然而,我的建议是配合DVCS,因为我使用Mercurial,当然Mercurial是最好的:) – 2011-04-24 22:56:42

+0

“更多的细节”o_O。顺便说一句,答案本身+1,并提到mercurial作为一个起点。 – zerkms 2011-04-24 23:00:42

5

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

而且trunk-tag-branch是一点点过时的模式,在SVN使用。 DSCM(mercurial,git)对分支和标签具有本地支持,因此您不需要明确创建这些目录。

+1

过时了吗?不,它仍然工作得很好。颠覆活着,并且很好。创建这些目录并不是很大的困难。 – duffymo 2011-04-24 22:43:22

+0

我认为他的意思是说这些目录的用法不应该结转到DVCS中,因为它们不使用文件夹级副本作为分支。 – 2011-04-24 22:44:45

+0

@duffymo:是的,我的意思正是Lasse V. Karlsen上面所说的。 – zerkms 2011-04-24 22:45:48

1

Subversion Red Bean这本书对这个话题有很好的讨论。

Pragmatic Version Control也是一本好书。

+0

这本实用的书有点旧了,如果他要读Subversion,他至少应该选择一些东西涵盖1.5或更新版本,包含所有新的合并更改。 – 2011-04-24 22:59:09

2

扩展位上Lasse V. Karlsen answer

  • 对于学习使用版本控制,你应该看看那个#1找到您想要的“相关问题”。

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

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

    • 寿命较长的分支如“主”或“主”或“稳定”(又名'树干')当前正在向新版本发展,“下一个”或“开发”或“不稳定”工作,'maint'或'maintenance'是上一次发布的错误修正。
    • 主题分支 - 开始使用新功能时,最好将其放入单独的短暂且通常未发布的分支中。通过这种方式,您可以在不影响其他工作的情况下开展一些实验性新功能;它允许在许多不相关的功能上并行工作。

HTH