我在Subversion(以及一般的存储库)讨论中经常看到这些词。 在过去的几年里,我一直在我的项目中使用SVN,但是我从来没有掌握这些目录的完整概念。

它们是什么意思?


当前回答

除了Nick所说的,您还可以在流式线:并行软件开发的分支模式中找到更多信息

在这个图中,main是主干,rel1- maintenance是分支,1.0是标记。

其他回答

这就是关于软件开发的事情,没有一致的知识,每个人似乎都有自己的方式,但这是因为它是一个相对年轻的学科。

这是我简单的方法,

trunk - trunk目录包含最新的、已批准的和合并的工作主体。与许多人所承认的相反,我的箱子只用于干净、整洁、合格的工作,而不是一个开发区域,而是一个释放区域。

在某个给定的时间点上,当主干似乎已经准备好释放时,它就会被标记并释放。

分支——分支目录包含实验和正在进行的工作。分支下的工作一直停留在那里,直到被批准合并到主干中。对我来说,这是所有工作完成的区域。

例如:我可以有一个迭代-5分支用于产品的第5轮开发,可能有一个原型-9分支用于第9轮实验,等等。

tags—标签目录包含已批准的分支和中继发布的快照。每当一个分支被批准合并到主干中,或者一个发布是由主干组成的,一个被批准的分支或主干发布的快照就会在标记下生成。

我想有了标签,我可以很容易地在时间里来回跳转到感兴趣的点。

我不太确定“标签”是什么,但分支是一个相当常见的源代码控制概念。

基本上,分支是在不影响主干的情况下对代码进行更改的一种方式。假设您想要添加一个相当复杂的新功能。您希望能够在进行更改时检入更改,但在完成该特性之前不希望它影响trunk。

首先创建一个分支。这基本上是创建分支时的主干副本。然后在分支中完成所有工作。在分支中所做的任何更改都不会影响trunk,因此trunk仍然可用,允许其他人继续在那里工作(比如做错误修复或小的增强)。一旦你的特性完成了,你就可以把分支集成回主干中。这将把所有的更改从分支移动到主干。

人们为分支使用了许多模式。如果您有一个同时支持多个主要版本的产品,通常每个版本都是一个分支。在我工作的地方,我们有一个QA分支和一个生产分支。在向QA发布代码之前,我们将变更集成到QA分支,然后从那里进行部署。当发布到产品时,我们从QA分支集成到生产分支,所以我们知道在生产中运行的代码与QA测试的代码是相同的。

这里是维基百科上关于分支的条目,因为它们可能比我能更好地解释事情。:)

对于熟悉GIT的人来说,GIT中的master相当于SVN中的trunk。

分支和标记在GIT和SVN中有相同的术语。

中继目录可能是您最熟悉的目录,因为它用于保存最新的更改。你的主要代码库应该在trunk中。

分支目录用于保存分支,无论它们是什么。

标签目录主要用于标记一组特定的文件。您可以对发布版本这样做,其中您希望“1.0”是这些修订版本的这些文件,“1.1”是这些修订版本的这些文件。通常,标签制作完成后就不需要修改了。有关标签的更多信息,请参见第4章。分支和合并(在Subversion版本控制中)。

One of the reasons why everyone has a slightly different definition is because Subversion implements zero support for branches and tags. Subversion basically says: We looked at full-featured branches and tags in other systems and did not found them useful, so we did not implement anything. Just make a copy into a new directory with a name convention instead. Then of course everyone is free to have slightly different conventions. To understand the difference between a real tag and a mere copy + naming convention see the Wikipedia entry Subversion tags & branches.