SVN:如何在存储库中存储公共和私有代码?

时间:2015-12-15 20:19:04

标签: svn version-control

我们公司有很多项目正在进行中。我们有一些公共代码(对于非常常见的东西,如文件操作,数据存储,事件管理......),每个人都可以访问(让我们称之为public)和一些更具体项目的代码(不打算重用)因为它们太具体了,只有项目团队成员才能访问(因为他们可能拥有一些不允许所有公司成员访问的IP),让我们称之为private

我很难用SVN做到这一点。

这是我到目前为止所尝试的内容:

1-我尝试使用以下内容创建单个存储库:

  • 存储public代码的公用文件夹
  • 私有文件夹,每个项目有一个子目录,用于存储项目特定的private代码:
    • 私人/ PROJECT1
    • 私人/项目2

在SVN服务器上,我可以轻松管理权限并让每个人都可以访问public,并且只允许合适的用户访问每个项目private文件夹。

但我得到的限制是用户不再允许创建分支。因为如果您对正在创建分支的文件夹的所有文件夹具有读取权限,则只能创建分支。

注意:允许一些超级用户创建分支会解决问题....但这是不可接受的,因为这些用户会看到他们不应该看到的代码....

2-我试图为每个项目创建一个公共存储库和一个私有存储库。

  • private存储库可以将public一个导入为svn:external
  • public存储库可以将private个导入为svn:external

两者的作用几乎相同。

在SVN服务器上,我可以轻松管理权限(在存储库级别而不是文件夹级别)。然后,可以创建分支......但是:

  • 很难知道哪个版本的public repo应与哪个版本的private版本一起使用...在某些时候,您最终会得到private的工作副本代码不再编译,因为您没有使用public一个
  • 的优秀版本
  • 提交时很痛苦,因为您经常需要提交两次(一次用于public次更改+一次用于private更改)
  • 这使分支管理变得困难(使用publicprivate的分支进行维护和同步)。

会有第三种选择吗?

或者是否有人可以提出一些建议来解决上述解决方案1-和2-中遇到的限制?

1 个答案:

答案 0 :(得分:0)

您可以重新安排放置主干,标签,分支等的位置。使用/trunk/private/project1/branches/branchname/private/project1代替/private/project1/trunk/private/project1/branches/branchname

这是svn book chapter on repository layout中推荐的布局。