如何最好地建立一个只读的Git镜像,以及设置提交后钩子,使得每当有人向SVN提交代码时,Git镜像会自动更新?主要是希望在服务器上运行一次git-svn克隆,然后让人们直接从Git中检出代码,而不必自己再次克隆整个SVN仓库。
如何最好地建立一个只读的Git镜像,以及设置提交后钩子,使得每当有人向SVN提交代码时,Git镜像会自动更新?主要是希望在服务器上运行一次git-svn克隆,然后让人们直接从Git中检出代码,而不必自己再次克隆整个SVN仓库。
我在使用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"
git remote add github[...]
设置一个名为github
的远程仓库。我使用的git仓库是一个“裸”的仓库(参见git init --bare
)。建立一个可写的Svn/Git镜像的最佳方法是使用SubGit——这是一款专门为此任务开发的工具。免责声明:我是这个工具的开发者。