一个SVN存储库中许多项目的文件夹结构?

时间:2009-02-21 20:33:45

标签: svn repository

我刚创建了一个Google Code SVN存储库,用于存储我的学校项目和家庭作业,并允许在学校和家庭之间轻松转移。

它创建的默认目录是:

  

https://simucal-projects.googlecode.com/svn/trunk/
  https://simucal-projects.googlecode.com/svn/tags/
  https://simucal-projects.googlecode.com/svn/branches/

我从未在多个项目中使用过存储库,但在阅读之后:One svn repository or many?我决定为我的所有随机学校项目提供一个存储库。

我应该只复制上面的文件夹结构,但对于每个项目?

  

https://simucal-projects.googlecode.com/svn/projectA/trunk/
  https://simucal-projects.googlecode.com/svn/projectA/tags/
  https://simucal-projects.googlecode.com/svn/projectA/branches/

     

https://simucal-projects.googlecode.com/svn/projectB/trunk/
  https://simucal-projects.googlecode.com/svn/projectB/tags/
  https://simucal-projects.googlecode.com/svn/projectB/branches/

这是多人一对一回购的人吗?

6 个答案:

答案 0 :(得分:44)

你有两种选择。你已经提到的那个,那就是每个项目有一个主干(选项1):

https://simucal-projects.googlecode.com/svn/projectA/trunk/
https://simucal-projects.googlecode.com/svn/projectA/tags/
https://simucal-projects.googlecode.com/svn/projectA/branches/

https://simucal-projects.googlecode.com/svn/projectB/trunk/
https://simucal-projects.googlecode.com/svn/projectB/tags/
https://simucal-projects.googlecode.com/svn/projectB/branches/

选项2将是一个主干,每个项目都是主干下的子文件夹:

https://simucal-projects.googlecode.com/svn/trunk/projectA/
https://simucal-projects.googlecode.com/svn/tags/projectA/
https://simucal-projects.googlecode.com/svn/branches/projectA/

https://simucal-projects.googlecode.com/svn/trunk/projectB/
https://simucal-projects.googlecode.com/svn/tags/projectB/
https://simucal-projects.googlecode.com/svn/branches/projectB/

选项1的优点是您可以独立地分支和标记每个项目。如果您需要单独部署每个项目,这是可取的。

如果所有项目一起部署,则需要选项2。这是因为您只需在部署时标记存储库一次。

由于您正在为学校项目使用Subversion,您需要问自己是否需要标记您的工作。你也可以问问自己是否需要创建分支(如果你想进行一些实验,你可能会想要)。您还需要问问自己,您是否乐意将所有工作合并为一个,是否更愿意灵活地独立分支每个项目。

我一直遵循的经验法则:将我们一起部署的任何内容捆绑在一起。

(顺便说一下 - 你可以在同一个存储库中有许多中继 - 这几乎相当于在多个存储库中有一个中继,除了每个存储库都维护自己的修订计数器,你不能在存储库之间进行合并。)

答案 1 :(得分:9)

这就是我用于家庭源代码控制的内容。

我只有一个主存储库。

  

存储库/ PROJECT1 /中继线
  存储库/ PROJECT1 /标签
  存储库/ PROJECT1 /分行

     

存储库/ Project2的/中继线
  存储库/ Project2中/标签
  存储库/ Project2的/分行

我喜欢这种结构,很容易引用项目并保持完整性。

答案 2 :(得分:6)

一个真实的例子:Apache Projects repository

答案 3 :(得分:2)

这个问题没有明确答案,因为它取决于最适合您项目的内容。

  1. 如果每个项目都有大量开发,我会使用/ projectA / trunk布局,因为它之间没有那么多连接(独立的组件/项目),所以需要分离所有内容。但是,您也可以在每个项目中使用一个SVN存储库。请记住,您将无法使用svn co http://..../svn/查看所有项目,因为这样也可以从所有项目中获取所有标记和分支,而不仅仅是中继。
  2. / trunk / projectA如果你的项目/组件紧密地结合在一起并且你需要从同一版本中标记和分支它们(就像一个非常接近主项目的库),肯定会更好。如果您愿意,也可以使用svn co http://.../svn/trunk/来获取最新的主干版本的所有项目。

从可维护性的角度来看,我几乎总是喜欢第二种方式;但是如果你的项目变得更大并且可能会延长,那么每个项目使用单独的存储库会更好。

除此之外:请检查您的家庭作业是否真的需要Google Code服务,因为它的目的是支持OSS。您可以随时在本地使用SVN,甚至可以通过SSH使用SVN,这样您也可以将存储库放在USB记忆棒或可远程访问的计算机上;你真的不需要托管。也可能存在隐私问题。

答案 4 :(得分:2)

如果你坚持只有一个存储库(我不在自己的营地)并做分支,那么我认为你的建议是好的。但同样,我认为SVN存储库等于项目。

答案 5 :(得分:2)

跟踪文件夹布局(版本控制)的主要目标之一是访问控制管理。

如果需要将开发团队(在Trunk上工作)和维护团队(与Branches打交道)分开,这个结构很好:

/trunk
      /Project1
      /Project2
/branches
         /Project1
         /Project2
/tags
     /Project1
     /Project2

如果我们想允许每个项目访问特定用户组,那么这种结构很好:

/Project1
         /trunk
         /branches
         /tags
/Project2
         /trunk
         /branches
         /tags