我们的团队正在加速通过SVN使用源代码控制。我们目前正在使用一些测试存储库来熟悉该过程。
我们已经准备好将其用于全职使用。
我们只构建小型到中间/大型网络应用程序,其中大多数共享相同的核心(但在LAMP / Win上有所不同),但是以某种方式进行了自定义。我们可能会在存储库中有数百个项目。此外,我们通常为一个组织执行多个项目。
我们有LAMP和Windows开发人员。 (我认为这使问题与Best practice for creating subversion repositories?)
有些不同您对如何构建存储库有任何建议吗?
答案 0 :(得分:3)
我认为单个存储库(当然需要备份),其下面有单独的项目目录就足够了:
/usr/share/code_repository
/base
/trunk
/branches
/tags
/project1
/trunk
/branches
/tags
/project2
/trunk
/branches
/tags
...
所以base是核心代码,project1,project2,... projectN将包含基础的变体。当您结帐projectN时,您还会检查base并从Project1中获得指向base的链接。
这样做的另一种方法是简单地使用一个带有核心的repo并为每个变体创建一个分支。也就是说,如果核心是一个,大块,你的变化实际上只是变化。
这似乎是代码打包架构的问题,而不是版本控制结构。
答案 1 :(得分:2)
将不同的项目创建为不同的存储库(在同一台计算机上)。这样您就可以分别控制每个项目的更改邮件列表:)
答案 2 :(得分:2)
你如何构建你的回购可能会在很大程度上取决于发布周期。当您使用新版本的通用核心时,是否会立即将其推广给所有客户?或者,您是否会逐步推出,因为每个客户都需要新功能(因此,需要核心中的新功能)?
如果您在升级核心时向所有人推出,那么您可能需要一组分支/标签/主干:
branches/
tags/
trunk/
core/
customer1/
project1/
project2/
customer2/
project1/
project2/
这样做的缺点是,如果每个客户都有很多代码,那么您的结账将是巨大的,并且您必须检查所有能够做任何事情的事情(尽管svn 1.6确实为您提供了能力检查树的一个子集。)
另一方面,如果不同的客户将按不同的时间表发布,那么您可能更愿意为每个客户提供一个顶级目录。你也希望某个地方能够保持你的共同核心。
core/
branches/
tags/
trunk/
customer1/
branches/
tags/
trunk/
如果你这样做,你可能想要查看svn:external
,这样每当你查看customer1的源代码树时,你都会得到一个共同核心的副本。但是,当您想要分支或标记时,这会导致一些问题。 (这可能是偏好第一种选择的理由。)
如果您还没有,请阅读“Pragmatic Version Control Using Subversion”。他们有一些使用外部的例子,这可能有助于澄清你想要使用哪种方案。
答案 3 :(得分:1)
颠覆的好处在于你在开始时并不需要那么关心。
因为您可以在存储库中移动文件和文件夹而不会丢失其历史记录,所以您可以从您认为正确的任何内容开始,看看它是否适合您。
如果没有,可以在以后更改,而不会出现太多问题。
答案 4 :(得分:0)
正确答案是“无论哪种方式最适合你”。
有些人会通过这种方式告诉你这种方式的优点,但最终,有项目 - > {trunk,tags,branches}或{trunk,tags,branches} - &gt ;项目,或者如果你有一个发布分支,或者你将这些重命名为其他任何东西或者在那里有其他命名的项目或删除一些命名的项目都取决于你和你的同事如何工作以及什么最适合你的开发周期
但是,根据您的说法,我建议如下:
repository
core
trunk
branches
tags
project1
trunk
branches
tags
project3
trunk
branches
tags
这样做的好处是,您可以将每个项目链接到核心的不同版本,这些版本将位于core / tags文件夹中,同时仍允许开发核心。这只是我的建议。你的心态可能会有所不同
答案 5 :(得分:0)
这是一个主观问题,因此您可能需要修改标签。
假设您正在询问开发项目,您必须澄清您正在进行的开发。不同的语言或项目类型通常会产生不同的“标准”。
从CVS继承的传统SVN结构是将trunk
,branches
和tags
放在主项目目录的旁边。对于每个单独的项目目录,这都会重复。
对于相互依存的项目,我个人更喜欢
root/somepath
trunk
myproject
branches
branch1
myproject
branch2
myproject
tags
tag1
myproject
tag2
myproject
这样可以更方便地检查所有使用相同标记/分支标记的项目。
但它高度依赖于您的构建脚本以及您计划如何让开发人员或用户签出。什么是最好的是你的项目合乎逻辑和有效。