在脱机SVN存储库之间同步代码

时间:2014-03-03 17:53:59

标签: svn

我想知道是否有一个很好的解决方案来完成以下场景:

  • 2个SVN存储库,Repo1和Repo2
  • Repo1只托管来源,但没有任何东西可以在那里开发。
  • Repo2将成为主要的开发储存库(Repo1的代码转到Repo2)
  • Repo1和Repo 2彼此之间没有物理连接(从不)
  • Repo2中已修改的代码应合并回Repo1(无活动连接且仅限最新版本)
  • SVN-Source包括外部以及应保留的其他SVN属性。

此方案表示一种情况,其中源代码在客户端维护。我们的客户希望获得新功能,并从他的Repo1中提供一些代码。作为一个契约,我们采用代码并放入我们自己的subversion Repo2并扩展代码。我们的工作完成后,我们希望将新版本退还给客户,然后将其合并回Repo1。

我找不到合适的方法只使用svn工具来实现这个szenario。供应商分支概念也没有真正起作用,因为它使用SVN-export。但是SVN-Export不会保留svn-properties。

提前感谢您的帮助。

此致 赖

3 个答案:

答案 0 :(得分:0)

你在SVN中寻找主 - 主复制。我建议迁移到git或mercurial,因为SVN从未实现过。如果不能放弃SVN,我建议转移到SVK或git-svn。 :

另一篇文章概述了有关此问题的更多详细信息:How to get master-master replication with Subversion?

答案 1 :(得分:0)

  1. 供应商分支可能使用export或diff | path或externals(以及BTW,svn:externals)必须只能在客户端解析| update | commit
  2. 您没有提及客户端同时提供的两个回购
  3. 一般情况下为了简单(和游戏中的纯SVN),我更喜欢svn diff -g | svn patch方式:

    • 每个必须通过svn diff -c -g
    • 传输在源上导出的修订版
    • 使用svn path
    • 在目标(通过WC)存储库中返回

    Diff(特别是git扩展格式)将包含导出修订版的所有元数据

答案 2 :(得分:0)

我现在最终使用了供应商分支概念,但使用dump / load而不是export。

  1. 从Repo1转储特定树(仅限HEAD)。
  2. 在SVN-Repo1的SVN授权文件中锁定树。现在没有人可以在客户端访问它。
  3. 使用“svndumptool”
  4. 对转储进行匿名化
  5. 在我们的Repo2中加载转储到tag / xyz
  6. 将转储合并到trunk / xyz(覆盖可能已存在的内容)
  7. 在Repo2
  8. 调整外部
  9. 在Repo2中开发
  10. 再次转储我们有女佣的所有更改(仅限Head)
  11. 使用“svndumptool”
  12. 对转储进行匿名化
  13. 将转储装回Repo1到tag / xyz
  14. 在SVN授权文件中解锁树。
  15. 将转储合并到trunk / xyz(覆盖可能已存在的内容)
  16. 在Repo1
  17. 调整外部

    ...瞧我们的客户有最新版本。所有这些步骤都可以编写得非常简洁并且易于自动化。

    我知道这不是一个好的解决方案,但也不是一个很好的任务; - )

    无论如何,非常感谢您的所有努力。