【问题标题】:read-only git mirror of an svn repositorysvn 存储库的只读 git 镜像
【发布时间】:2009-11-07 12:48:33
【问题描述】:

设置现有 svn 存储库的只读 git 镜像并设置提交后挂钩以便每当有人提交到 svn 时,git 镜像会自动更新的最佳方法是什么?主要是,我想在服务器上只运行一次 git-svn clone,然后让人们只需从 git 中签出,而不必自己 git-svn clone 整个 svn 存储库。

【问题讨论】:

    标签: svn git post-commit


    【解决方案1】:

    我在一个使用 SVN 的项目上这样做(推送到 github 上的公共存储库)。我没有 SVN 提交钩子,但这是一个 cron 作业:

    #!/bin/bash
    
    repo=/path/to/my-mirror.git
    lockfile="$repo/cron-lock"
    
    if ! lockfile -r1 "$lockfile";then
            exit 1
    fi
    
    export GIT_DIR=$repo
    # update refs/remotes/git-svn:
    git svn fetch -q
    # make 'master' match the git-svn branch:
    git fetch "$repo" refs/remotes/git-svn:refs/heads/master
    # publish to github
    git push github master
    
    rm -f "$lockfile"
    

    如果您从 SVN 提交挂钩而不是 cron 作业触发它,它应该可以工作。

    当然,您需要使用git remote add github [...] 设置一个名为github 的遥控器。我使用的 git 存储库是一个“裸”存储库(请参阅git init --bare)。

    【讨论】:

      【解决方案2】:

      设置 Svn/Git 镜像(可写)的最佳方式是使用 SubGit - 这是专门为此任务开发的工具。免责声明:我是这个工具的开发者。

      【讨论】:

      • 此外,SubGit 2.0 不再需要对 Subversion 存储库的本地访问,并且还可以构建远程 Subversion 存储库的可写 Git 镜像(请参阅subgit.com/eap)。
      • @AlexanderKitaev 请注意,在链接到产品或其他网站时,您必须披露您的隶属关系。我从this post 看到您开发了 SubGit。我已经编辑了这个答案以反映这一点。以后,如果您链​​接到 SubGit,请务必提及您的连接。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-16
      • 2012-08-14
      相关资源
      最近更新 更多