2009-07-25 147 views
3

当创建颠覆项目时,每个单独的项目应该包含自己的主干,分支和标签目录吗?例如。Subversion项目结构?

MyProject的1
- 分支
- 标签
- 主干
MyProject的2
- 分支
- 标签
- 主干
等...

还是应该每个项目本身进入一个无所不包的结构?例如。

分支
标签
干线
- MyProject的1
- MyProject的2
等等

+0

Dupe of http://stackoverflow.com/questions/518864/subversion-structure-questions/519090众多 – 2009-07-25 21:49:27

回答

4

选项1将是一个简单得多的分裂到不同形式的源代码控制的宜需要出现,因此我更喜欢。

在我看来,在第一个选项中管理项目范围的权限会更容易。

2

这两种方法都很常见,但第一种方法更为常见。

更常见的是为单独的项目设置单独的存储库 - 人们无法忍受在“他们的”存储库中存在“不相关”的东西。

+1

独立存储库的方法可以为每个项目配置单独的访问权限。不推荐IMO,但可能有理由这样做。 – Treb 2009-07-25 21:03:36

1

对于最近的CVS-SVN切换器,我们决定在两者之间做一些事情:在顶层集成相关项目,底层有trunk/tags/branches,以及其下的项目。

这样做是因为在这个地方,很多项目彼此相关,并且经常被标记,分支等。

+2

优秀的解释。人们常常因为某人告诉他们而做某事。关于哪些片段进入某个特定项目的关键决定应该是“将一起推广?”! – 2009-07-25 21:52:26

2

我亲自去的选项。这是因为与选项2以下相当微妙的问题:

随着选项2,这是常见的有你的工作副本库结构相匹配。这意味着您可以有效地签出整个副本(或其中的一部分,但是在相同的总体结构中)。

这是一个问题,当涉及到依赖关系时,比如projectA & projectB引用libraryC,那么在库中所做的更改和应用于这两个项目的更改之间没有控制权。一旦提交到libraryC的主干,所有使用它的项目都会收到它。这样做的最终结果是你害怕改变libraryC,因为它可能会破坏其中一个项目。

使用option1,可以使用外部函数将特定版本的libraryC引入项目A & projectB。事实上,如果需要,A & B可以使用不同的版本。

这意味着您可以随意更改libraryC,然后控制何时将更改应用到项目 - 根据需要测试和更改代码,并知道您正在升级到最新版本的库。如果升级存在根本性问题,则可以继续使用旧版本,直到库问题得到解决。

另一种看待这个问题的方法是使用option2,如果您查看projectA的历史记录,则无法知道对库所做的更改会影响项目。事实上,同一个项目A的修订版可能会有一天工作,而不是下一个,因为图书馆已经改变了。你可以得到一个告诉你这些变化的历史的唯一方法就是查看完整的历史记录,这些历史记录还包括对projectF和libraryX完全不相关的变化,从而使你很难看到有用的信息。

在option1中,projectA的历史版本中有一个修订,告诉它使用库的新版本。这种变化并不奇怪 - 当你明确地说要使用新版本的库时。这通常是一个更稳定的环境。

+0

+1既可以避免大量结账,也可以避免构建环境的稳定性。 – 2009-07-25 21:55:47