svn存储库,从不同的远程位置更新和提交

时间:2018-08-21 08:26:34

标签: svn replication

在我们公司中,我们有一个棘手的环境,人们在几个国家工作。出于性能原因(网络访问),我们希望使用以下方案复制SVN存储库。

假设我们有法国人和德国人:

  • 我们的“主” SVN存储库位于法国,允许人们提交此存储库
  • 我们在德国有一个“从属复制”副本,不允许人们将其提交到该存储库中

在我的应用程序中,我想:

  1. 根据最小Ping查找“最接近的” SVN存储库
  2. 从这个最近的SVN存储库中签出/更新
  3. 如果用户要提交内容,请提交到法语“主”服务器

有什么办法可以使用SVN做到这一点?还有其他想法吗?无法切换到GIT或其他版本控制系统。谢谢!

2 个答案:

答案 0 :(得分:2)

那是一个很大的愿望清单。对于第一部分,存在一个产品VisualSVN Server,它仅允许该产品(复制,主从),等等。你应该看看。

https://www.visualsvn.com/server/features/multisite-replication/

对于第二部分,我认为人们应该能够管理这些不同的位置。您可以使用Subversion命令relocate在不同位置使用相同的签出副本。

答案 1 :(得分:1)

这是我最终实现的目标:

  1. SVN复制:只需使用svnsync命令将任何提交从主存储库传播到从存储库
  2. SVN重定位:使用svn relocate命令在每次将在远程执行某些操作(提交,创建分支,共享等)的操作之前和之后进行操作

在应用程序中:

  1. 基于ping查找最近的服务器。在编写Java代码时,我确实写了自己的方法来查找ping值
public static Duration ping(String host) {
    Instant startTime = Instant.now();
    try {
        InetAddress address = InetAddress.getByName(host);
        if (address.isReachable(1000)) {
            return Duration.between(startTime, Instant.now());
        }
    } catch (IOException e) {
        // host not available, nothing to do here
    }
    return Duration.ofDays(1);
}
  1. 在执行将修改远程存储库的操作时,请检查本地SVN副本是主URL还是从URL,如果不是主URL,则在操作之前执行svn relocate,然后执行另一个{{1} },以恢复到更快的SVN克隆存储库。