请求协助实现SVN提交后自动同步至GitHub仓库
我来帮你搞定SVN提交后自动同步到GitHub的事儿,步骤其实很清晰,咱们一步步来:
第一步:确保你的Git-SVN仓库已正确关联SVN
你说已经克隆了SVN项目,那应该已经通过git svn clone http://example.com/svn/project/_Trunk/myproject完成了初始化。如果还没做这一步,先执行这个命令把SVN trunk拉到本地Git仓库里。
第二步:添加GitHub作为远程仓库
进入你的Git-SVN本地仓库目录,执行下面的命令把GitHub仓库设为远程:
git remote add github git@git.example.com:directory/myproject.git
第一次同步前,先把GitHub仓库的内容拉下来(如果GitHub上已有代码的话),避免冲突:
git pull github master --allow-unrelated-histories
然后把当前SVN的内容推送到GitHub做初始同步:
git push github master
第三步:设置SVN服务器的post-commit钩子(核心步骤)
要实现SVN提交后自动同步,关键是在SVN服务器上配置post-commit钩子,它会在每次SVN提交完成后自动触发同步操作。
- 找到SVN服务器上对应项目的仓库目录,进入
hooks文件夹。你会看到一个名为post-commit.tmpl的模板文件,先复制一份并重命名为post-commit:
cp post-commit.tmpl post-commit
- 编辑
post-commit文件,替换里面的内容为以下脚本(注意把/path/to/your/git-svn-repo改成你的Git-SVN本地仓库实际路径):
#!/bin/sh # 切换到Git-SVN本地仓库目录 cd /path/to/your/git-svn-repo || exit 1 # 从SVN拉取最新提交,确保本地仓库和SVN同步 git svn rebase # 将同步后的代码推送到GitHub git push github master exit 0
- 给钩子文件添加可执行权限,否则SVN服务器无法运行它:
chmod +x post-commit
一些需要注意的细节
- 确保运行SVN服务器的用户(比如
apache或svn用户)有访问你的Git-SVN本地仓库的权限,并且能通过SSH访问GitHub(需要把服务器用户的SSH公钥添加到GitHub账户的SSH密钥列表里)。 - 如果你的SVN有分支或标签,可能需要调整
git svn的配置(比如用-s参数识别标准SVN目录结构),但你这里用的是_Trunk下的项目,直接用trunk映射master就没问题。 - 测试一下:在SVN上提交一个小修改,然后查看GitHub仓库是否自动更新了代码,如果没生效,可以检查SVN服务器的日志,看看钩子有没有报错。
内容的提问来源于stack exchange,提问作者Vestars
相关产品推荐
相关产品推荐

