svn 存储库,从不同的远程位置更新和提交
svn repository, update and commit from different remote locations
在我们公司,我们有一个棘手的环境,人们在多个国家/地区工作。出于性能原因(网络访问),我们想使用以下方案复制我们的 SVN 存储库。
假设我们有法国人和德国人:
- 我们的 "master" SVN 存储库位于法国,允许人们提交到此存储库
- 我们在德国有一个 "slave-replication" 副本,不允许人们提交到此存储库
在我的申请中我想:
- 根据最小 ping
找到 "closest" SVN 仓库
- Checkout/update 来自最近的 SVN 存储库
- 如果用户想要提交内容,请提交到法语 "master" 服务器
有什么方法可以使用 SVN 来实现吗?还有其他想法吗?无法切换到 GIT 或其他版本控制系统。谢谢!
这是一个很大的愿望清单。对于第一部分,存在一个产品 VisualSVN Server,它只允许(复制、主从,...)。你应该看看那个。
https://www.visualsvn.com/server/features/multisite-replication/
对于第二部分,我认为人们应该能够管理那些不同的位置。通过使用 Subversion 命令 relocate
.
,您可以在不同的位置使用相同的签出副本
以下是我最终实现的方法:
- SVN 复制:只需使用
svnsync
命令传播从主存储库到从存储库的任何提交
- SVN 重定位:使用
svn relocate
命令在每个将在远程执行某些操作(提交、创建分支、共享...)之前和之后执行此操作
申请中:
- 根据
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);
}
- 在执行将修改远程存储库的操作时,检查本地 SVN 副本是主副本还是从副本URL,如果不是主副本URL,则执行
svn relocate
操作前,操作后 svn relocate
取回更快的 SVN 克隆存储库。
在我们公司,我们有一个棘手的环境,人们在多个国家/地区工作。出于性能原因(网络访问),我们想使用以下方案复制我们的 SVN 存储库。
假设我们有法国人和德国人:
- 我们的 "master" SVN 存储库位于法国,允许人们提交到此存储库
- 我们在德国有一个 "slave-replication" 副本,不允许人们提交到此存储库
在我的申请中我想:
- 根据最小 ping 找到 "closest" SVN 仓库
- Checkout/update 来自最近的 SVN 存储库
- 如果用户想要提交内容,请提交到法语 "master" 服务器
有什么方法可以使用 SVN 来实现吗?还有其他想法吗?无法切换到 GIT 或其他版本控制系统。谢谢!
这是一个很大的愿望清单。对于第一部分,存在一个产品 VisualSVN Server,它只允许(复制、主从,...)。你应该看看那个。
https://www.visualsvn.com/server/features/multisite-replication/
对于第二部分,我认为人们应该能够管理那些不同的位置。通过使用 Subversion 命令 relocate
.
以下是我最终实现的方法:
- SVN 复制:只需使用
svnsync
命令传播从主存储库到从存储库的任何提交 - SVN 重定位:使用
svn relocate
命令在每个将在远程执行某些操作(提交、创建分支、共享...)之前和之后执行此操作
申请中:
- 根据
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);
}
- 在执行将修改远程存储库的操作时,检查本地 SVN 副本是主副本还是从副本URL,如果不是主副本URL,则执行
svn relocate
操作前,操作后svn relocate
取回更快的 SVN 克隆存储库。