一个SVN仓库的只读Git镜像。

15

如何最好地建立一个只读的Git镜像,以及设置提交后钩子,使得每当有人向SVN提交代码时,Git镜像会自动更新?主要是希望在服务器上运行一次git-svn克隆,然后让人们直接从Git中检出代码,而不必自己再次克隆整个SVN仓库。

2个回答

4

我在使用SVN的项目上进行此操作(将内容推送到github上的公共存储库)。我没有SVN提交挂钩,但是我在定时任务中执行以下操作:

#!/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——这是一款专门为此任务开发的工具。免责声明:我是这个工具的开发者。


1
此外,SubGit 2.0不再需要本地访问Subversion存储库,也可以构建远程Subversion存储库的可写Git镜像(请参见http://subgit.com/eap)。 - Alexander Kitaev
2
@AlexanderKitaev请注意,在链接到产品或其他网站时,您必须披露您的隶属关系。 我从此帖子 中看到您开发了SubGit。 我已编辑这个答案以反映这一点。 在将来,如果您链接到SubGit,请务必提及您的联系。 - elixenide

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接