是否可以为同一个项目拥有多个存储库?
我目前正在使用带有TortoiseSVN的SVN和我家的外部硬盘上的存储库,以及备份方案,这不太理想。
所以我想到的是在unfuddle创建一个帐户并拥有第二个(我的第一个是第一个)存储库,我可以在那里提交(即使是远程备份解决方案)。
当然,我希望代码中的完整性,我不希望两个(或更多?)存储库之间存在差异,这意味着当我提交代码时,两个存储库都应该更新。
那么我该怎么办呢?
我脑子里想的就是提交到我的主存储库(主存储库),然后它会自动提交到在线存储库(未解决的存储库)自动(因为我当然不会我希望每次提交代码时手动提交到两个存储库)
这可能吗?
答案 0 :(得分:5)
编辑:急速从来没有导致质量,也没有我的答案,错过了问题中的所有Windows引用。所以这里有一个关于如何在Windows上进行同步的故事。
在这种情况下你有两台机器:
在B上创建一个您希望从A同步的新存储库。此存储库为空(在rev0上运行)非常重要。
在B上,在新创建的存储库的SVN文件夹中,浏览到/ hooks并创建以下BAT文件:
开始-commit.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的存储库。
在机器A上的存储库的/hooks
文件夹中
<强>-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或其他在线存储库,他们将trunk / branches / tags结构提交到版本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 root的/ hooks中。
答案 1 :(得分:1)
我不确定我是否完全理解你的问题,但我认为你所寻找的是svnsync。
您可以将主存储库放在笔记本电脑的硬盘和桌面/家庭服务器上的镜像存储库中。
只需将更改提交到主存储库,然后将其同步到镜像存储库即可。此过程是增量式的,因此只会更改自上次同步以来的修订,但请注意未版本化的属性。
答案 2 :(得分:-1)