当前位置:  开发笔记 > 开发工具 > 正文

源代码管理:同一项目的多个存储库

如何解决《源代码管理:同一项目的多个存储库》经验,为你挑选了1个好方法。

是否可以为同一个项目拥有多个存储库?

我目前正在使用带有TortoiseSVN的SVN和我家的外部硬盘上的存储库,以及备份方案,这并不理想.

因此,我在我的脑海正在一个账户unfuddle并且具有第二(即第一我家的一个)存储库的地方,我可以承诺在那里(即使是远程备份解决方案).

当然,我希望代码中的完整性,我不希望两个(或更多?)存储库之间存在差异,这意味着当我提交代码时,两个存储库都应该更新.

那么我该怎么做才能实现呢?

这是我在我的脑海中承诺我的主要储存库(家庭一个),然后它会自动提交到在线仓库(该unfuddle一个),自动(因为我当然不想手动提交到两个库每次我提交我的代码)

这可能吗 ?



1> Martijn Laar..:

一切皆有可能 :)

编辑:急速从来没有导致质量,也没有我的答案,缺少问题中的所有Windows引用.所以这里有关于如何在Windows上进行同步的故障.

在这种情况下,您有2台机器:

机器A:存储库现在运行的位置.

机器B:您要同步到的地方.

在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的存储库.

/hooks机器A上的存储库的文件夹中

后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代码或其他在线存储库,他们将树干/分支/标记结构提交到修订版1.如果您希望使用这些第三方存储库,则必须联系它们以重置存储库location作为同步存储库.

为了给予应有的信用,我从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位是machineB上的svnserve根,即使这个通用BAT文件应该放在machineA的svnserve root 的/ hooks中.

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有