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

svn repository, update and commit from different remote locations

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

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

在我的申请中我想:

  1. 根据最小 ping
  2. 找到 "closest" SVN 仓库
  3. Checkout/update 来自最近的 SVN 存储库
  4. 如果用户想要提交内容,请提交到法语 "master" 服务器

有什么方法可以使用 SVN 来实现吗?还有其他想法吗?无法切换到 GIT 或其他版本控制系统。谢谢!

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

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

对于第二部分,我认为人们应该能够管理那些不同的位置。通过使用 Subversion 命令 relocate.

,您可以在不同的位置使用相同的签出副本

以下是我最终实现的方法:

  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,则执行svn relocate操作前,操作后 svn relocate 取回更快的 SVN 克隆存储库。