一切皆有可能:)
编辑:匆忙永远不会导致质量,我的回答也没有,错过了问题中的所有 Windows 引用。所以这里有一个关于如何让同步在 Windows 上工作的问题。
在这种情况下,您有 2 台机器:
- 机器 A:存储库现在运行的位置。
- 机器 B:您要同步到的位置。
在 B 上创建一个您希望从 A 同步到的新存储库。此存储库为空白(在 rev0 上运行)非常重要。
在 B 上,在新创建的存储库的 SVN 文件夹中,浏览到 /hooks 并创建以下 BAT 文件:
开始提交.bat
IF "%2" == "someusername" (goto :label1) else (echo "Only the someusername account may commit new revisions" >&2 )
exit 1
goto :eof
:label1
exit 0
pre-revprop-change.bat
IF "%3" == "someuser" (goto :label1) else (echo "Only the someuser user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0
someuser
是机器 A 的存储库中存在的同步用户,并且是机器 B 的存储库中唯一拥有权限的用户。非常重要的是,没有手动提交到机器 B 的存储库。
在/hooks
机器 A 上存储库的文件夹中
提交后.bat
CD PATH_TO_SUBVERSION\bin
svnsync sync svn://machineB/repos --non-interactive --no-auth-cache --source-username machineAusername --source-password machineApassword --sync-username machineBusername --sync-password machineBpassword
一旦这些批处理文件就位,我们需要告诉 B 上的存储库我们想要同步到它:
svnsync initialize svn://
机器B/repos svn://
机器/repos --non-interactive --no-auth-cache --source-username
A机器用户名机器 密码机用户名--source-password
机器 --sync-username
B密码 --sync-password
它应该返回如下内容:Copied properties for revision 0.
现在,每次您提交到机器 A 上的存储库时,它都会被复制到机器 B 的存储库中。
请务必注意,如果您想同步到Google 代码或其他在线存储库,他们将主干/分支/标签结构提交到修订版 1。如果您希望使用这些第三方存储库,您必须联系他们重置存储库位置作为同步存储库。
为了给予应有的荣誉,我从http://www.svnforum.org/2017/viewtopic.php?t=5745&sid=06551a22d9c0b5780cf1faab6b0e8ce9复制了 pre-revprop-change.bat 和 start-commit.bat
我刚刚自己在一个测试存储库上实现了这个,它看起来就像一个魅力。我很高兴我注意到了这个问题,尽管 svnsync 在我的头骨中已经陷入太深了。我打算在工作中设置 svn 时进行设置。所以我知道我明天上班的第一件事是什么,谢谢!
编辑2:
如果您像我一样拥有大量存储库,那么这个通用的 post-commit.bat 可能会吸引您:
SET REPOS=%1
SET REV=%2
SET REPOS=%REPOS:D:\SVN=%
CD "C:\Program Files\Subversion\bin"
svnsync sync svn://machineB/%REPOS%-sync --non-interactive --no-auth-cache --source-username usernameA --source-password passwordA --sync-username usernameB --sync-password passwordB
这会捕获存储库名称并使用它来动态确定同步 URL。为了清楚起见,我为机器 B 上的所有同步存储库添加了后缀-sync
。这个D:\SVN
位是machineB上的 svnserve 根,即使这个通用 BAT 文件应该放在machineA的 svnserve 根的 /hooks 中。