svn - 源代码控制 : Multiple repositories for the same project

标签 svn version-control tortoisesvn repository commit

同一个项目可以有多个存储库吗?

我目前正在将 SVN 与 TortoiseSVN 与我家的外部硬盘上的存储库一起使用,并且就备份解决方案而言,这并不理想。

所以我脑子里想的是用unfuddle开个账户。并有一个 第二个 (我的家是第一个)存储库,我可以在那里提交(即使是远程备份解决方案)。

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

那么我该怎么做才能做到这一点?

我的想法是提交到我的主要存储库(家庭存储库),然后它会自动提交到在线存储库(unfuddle 存储库)自动 (因为我当然不想每次提交代码时都手动提交到两个存储库)

这可能吗 ?

最佳答案

Everything's possible :)

编辑 : 匆忙永远不会导致质量,我的回答也没有,错过了问题中的所有 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 上存储库的文件夹

    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/

    相关文章:

    java - 如何为具有 iOS、Android、Web 应用程序和 Java 后端的平台构建源代码控制存储库?

    tortoisesvn - 如何使用 TortoiseSVN 中的启动提交 Hook 来设置自定义日志条目?

    svn - 使用 TortoiseSVN 将 3Gb 文件添加到 Subversion 并收到错误 413 请求实体太大

    svn - 管理 SVN 存储库配置文件

    linux - 如何为现有的 SVN 颠覆服务器添加新用户帐户?

    visual-studio - 使用同一Visual Studio 2005解决方案的不同版本/分支

    version-control - 使用 Hg Convert 扩展、Branchmap 选项

    version-control - 有没有办法搜索特定字符串的所有 mercurial 提交?

    svn - 使TortoiseSVN将文件的修改时间设置为最新修订的时间戳

    svn - 允许 hgsubversion SVN 克隆推迟所需的步骤