当使用Subversion(svn)进行多个项目的源代码控制时,我注意到我的所有项目目录中的修订号都增加了.为了说明我的svn布局(使用虚构的项目名称):
/NinjaProg/branches /tags /trunk /StealthApp/branches /tags /trunk /SnailApp/branches /tags /trunk
当我对Ninja程序的主干执行提交时,假设我已经将其更新为修订版7.第二天让我们说我对Stealth应用程序进行了一些小改动,它将作为修订版8返回.
问题是:在使用一个Subversion服务器维护多个项目时,是否普遍接受的做法是让所有项目中不相关项目的修订号增加?或者我做错了,应该为每个项目创建单独的存储库?或者它完全是另一回事?
编辑:我推迟了标记答案,因为很明显这两种方法都有原因,即使这个问题首先出现,我还是想指出其他一些最终提出同样问题的问题:
我应该将所有项目存储在一个存储库还是多个存储库中?
一个SVN存储库还是很多?
我很惊讶没有提到这在版本控制中与Subversion讨论,可以在这里免费在线获得.
我在这个问题上读了一段时间回来,这确实似乎是个人选择的问题,有关于这个问题的一个很好的博客文章在这里.编辑:由于博客似乎已关闭,(此处存档版本),这里有Mark Phippard关于这个主题的一些说法.
这些是单一存储库方法的一些优点.
简化管理.部署一组钩子.一个备份存储库.等等
分支/标签灵活性.将代码全部放在一个存储库中,可以更轻松地创建涉及多个项目的分支或标记.
轻松移动代码.也许您想从一个项目中获取一部分代码并在另一个项目中使用它,或者将其转换为多个项目的库.在同一个存储库中移动代码很容易,并保留代码的历史记录.
以下是单一存储库方法的一些缺点,即多存储库方法的优点.
尺寸.处理许多较小的存储库可能比一个较大的存储库更容易.例如,如果您退出项目,则只需将存储库存档到介质并将其从磁盘中删除并释放存储空间.也许您需要出于某种原因转储/加载存储库,例如利用新的Subversion功能.如果它是一个较小的存储库,这样做更容易,影响更小.即使您最终想要对所有存储库执行此操作,一次执行一个存储库的影响也会较小,假设没有迫切需要一次完成所有存储库.
全球修订号.即使这不应成为一个问题,但有些人认为它是一个问题,并且不希望看到修订版号在存储库中前进,而且不活动的项目在修订历史中有很大的差距.
访问控制.虽然Subversion的authz机制允许您根据需要限制对存储库的某些部分的访问,但在存储库级别执行此操作仍然更容易.如果您的项目只有少数几个人可以访问,那么使用该项目的单个存储库更容易.
行政灵活性.如果您有多个存储库,则根据存储库/项目的需要更容易实现不同的钩子脚本.如果您需要统一的钩子脚本,那么单个存储库可能会更好,但如果每个项目都需要自己的提交电子邮件样式,那么将这些项目放在单独的存储库中会更容易
当你真正想到的时候,多个项目存储库中的修订号会变高,但你不会用完.请记住,您可以在子目录中查看历史记录,并快速查看与项目相关的所有修订号.
我认为强烈建议您为每个项目创建单独的存储库.如果只是为了避免你正在谈论的场景.
使用版本控制,尤其是Subversion,您可以轻松地将存储库的各个部分检入另一个工作副本,然后将它们提交回各自的存储库.这使您可以保持它们清晰独立和独特,同时为您提供极大的灵活性.一旦你进入SVN多一点(我假设你是新手.)你可以开始使用钩子,我可能会看到你设置时可能会遇到困难的地方.如果权限对您很重要,则单个存储库可能比必要更难.
此外,如果您担心需要花费大量时间来设置每个存储库,请查看Apache配置文件的SVNParentPath变量.(同样,我假设你正在使用Apache.)