2009-11-07 87 views
15

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

回答

4

我这样做的项目,使用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)。

+0

谢谢,使用github似乎要走的路 – 2009-11-08 13:50:29

2

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

+0

美丽,谢谢 – 2012-01-06 00:42:04

+1

此外,SubGit 2.0不再需要本地访问Subversion存储库,也可以构建远程Subversion存储库的可写Git镜像(请参阅http:// subgit.com/eap)。 – 2012-11-26 21:48:39

+2

@AlexanderKitaev请注意,您必须在链接到产品或其他网站时披露您的联系。我从[这篇文章](http://stackoverflow.com/a/13288270/2057919)看到你开发了SubGit。我编辑了这个答案来反映这一点。将来,如果您链​​接到SubGit,请务必提及您的连接。 – 2016-01-19 18:03:10