为同一个项目使用两个不同的SVN存储库

时间:2015-05-12 15:24:33

标签: svn

作为一名顾问,我通常可以访问客户端的svn存储库,以便签出,处理并最终提交项目。

最优(是客户端请求)将仅在客户端svn上提交稳定版本并避免中间(即不可构建)提交但我也希望保持开发过程的跟踪并享受到版本控制系统......

然后做一些像这样的事情会很棒:

  • 结账PROJ来自客户的svn
  • 使用内部svn进行开发
  • 在客户端的svn上提交稳定版本

我能够使用一些脚本完成这项任务(自动执行结账,删除.svn的东西,提交等等),但这远远不是一个平稳的过程。

我试图寻找解决方案,但我还没有找到任何有用的东西。

有没有人知道一种简单而富有成效的方法呢?

提前谢谢。

2 个答案:

答案 0 :(得分:1)

最好和最简单的解决方案是使用你身边的另一个SCM +桥接到SVN(Mercurial + HGSubversion, not Git

但即使使用纯SVN,您至少还有两个可行的解决方案:供应商分支和共享UUID

供应商分支

  • 阅读Vendor Branches topic from SVN Book(主要是Vendor Branches from Foreign Repositories部分)和相关的Externals Definitions
  • 根据"供应商分支机构"构建您的存储库,其中包含指向客户存储库的链接。建议
  • 在您的存储库的私有部分执行您的日常工作
  • 将抛光和完成的工作合并到供应商分支并将结果(一个大的合并集)提交到客户的存储库(您必须在客户端上拥有RW权限)
  • (不时)将客户回购中的其他人提交到您回购中的私人分支

共享UUID

您可以通过干净,合法的方式(svn help relocate)更改(对于现有WC)相关SVN-repository的URL,该方式主要用于基础架构管理,但可以为您使用。

用于重新定位的FROM和TO存储库假定为相同的存储库,通过检查存储库的UUID来验证身份,因此:对于两个不同的存储库(客户端和您),您必须提供相同的UUID。

通过加载|转储循环(svnadmin dump客户端的repo /或只需要它/ svnadmin load ... --force-uuid的节点到您的空存储库中)可以很容易地实现它,之后你可以执行存储库中的任何作业。 "准备发布"如果您:

,工作将出现在客户的回购中
  • 将您的WC重新定位到客户端的存储库
  • 更新(半自动 - 您无法避免它,并且在没有您干预的情况下,您的WC中会出现非冲突的合并),而客户端的错误更改
  • 提交您(可能是长时间)WC的更改(它将是"已修改"与客户的回购相反)作为一个巨型提交
  • 将WC重新定位到您的存储库

PS :"供应商分支"以我的POV更安全的方式,代价是Subversion的合并可能存在问题(它们仍然不像DVCS世界那么漂亮)

答案 1 :(得分:0)

对不起,我的回答意味着使用另一个VCS,但这对git-svn来说很容易。在开发期间提交git,在单个“干净”提交中压缩提交,然后将dcommit提交到SVN服务器。

如果您不是git用户,这可能会过于复杂。