同一个项目可以有多个存储库吗?
我目前正在将 SVN 与 TortoiseSVN 与我家的外部硬盘上的存储库一起使用,并且就备份解决方案而言,这并不理想。
所以我脑子里想的是用unfuddle开个账户。并有一个 第二个 (我的家是第一个)存储库,我可以在那里提交(即使是远程备份解决方案)。
现在,当然,我希望我的代码具有完整性,并且我不希望两个(或更多?)存储库之间存在差异,这意味着当我提交代码时,两个存储库都应该同时更新。
那么我该怎么做才能做到这一点?
我的想法是提交到我的主要存储库(家庭存储库),然后它会自动提交到在线存储库(unfuddle 存储库)自动 (因为我当然不想每次提交代码时都手动提交到两个存储库)
这可能吗 ?
最佳答案
Everything's possible :)
编辑 : 匆忙永远不会导致质量,我的回答也没有,错过了问题中的所有 Windows 引用。因此,这里简要介绍了如何在 Windows 上进行同步。
在这种情况下,您有 2 台机器:
现在。
同步到。
在 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 上存储库的文件夹post-commit.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://
machineB /repos svn://
machineA /repos --non-interactive --no-auth-cache --source-username
machineAusername --source-password
machineApassword --sync-username
machineBusername --sync-password
machineBpassword 应该返回如下内容:
Copied properties for revision 0.
现在,每次提交到机器 A 上的存储库时,它都会被复制到机器 B 的存储库中。
需要特别注意的是,如果要同步到Google Code或者他们将主干/分支/标签结构提交到修订版 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。我用
-sync
为机器 B 上的所有同步存储库添加后缀为了清楚起见。 D:\SVN
bit 是 上的 svnserve 根machineB 即使这个通用 BAT 文件应该放在 的/hooks 中machineA 的 svnserve 根。
关于svn - 源代码控制 : Multiple repositories for the same project,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/616404/