【发布时间】:2009-11-07 12:48:33
【问题描述】:
设置现有 svn 存储库的只读 git 镜像并设置提交后挂钩以便每当有人提交到 svn 时,git 镜像会自动更新的最佳方法是什么?主要是,我想在服务器上只运行一次 git-svn clone,然后让人们只需从 git 中签出,而不必自己 git-svn clone 整个 svn 存储库。
【问题讨论】:
标签: svn git post-commit
设置现有 svn 存储库的只读 git 镜像并设置提交后挂钩以便每当有人提交到 svn 时,git 镜像会自动更新的最佳方法是什么?主要是,我想在服务器上只运行一次 git-svn clone,然后让人们只需从 git 中签出,而不必自己 git-svn clone 整个 svn 存储库。
【问题讨论】:
标签: svn git post-commit
我在一个使用 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)。
【讨论】:
设置 Svn/Git 镜像(可写)的最佳方式是使用 SubGit - 这是专门为此任务开发的工具。免责声明:我是这个工具的开发者。
【讨论】: