自动将Git同步到SVN

时间:2012-11-30 22:30:13

标签: macos git svn sync

要点:

我想要完成的是定期将 Git存储库推送到Subversion,以便其他人可以使用无人参与的脚本检查它。我不需要相反的方向,SVN - > GIT中。

我希望有人能帮我完成这件事。我见过的其他线程非常接近我所需要的,但没有一个拥有完整,合理的解决方案。 Pushing an existing git repository to SVN非常有用。

我的问题:

我的雇主维护着一个Subversion服务器,该服务器具有异地备份,冗余,并且可以通过Web界面访问,因此我的同事和经理可以进行随意的审查。

我在Git下有六个项目。 (我有多台机器,我做了大量的推测性分支,而且我经常提交。另外,Xcode在Git上效果更好。我们的SVN管理员同意Git对我来说几乎不可谈判。)我一直这样做是通过保持一个我的桌面计算机上的裸仓(由我的雇主和其所在地拥有),所有工作副本都跟踪。

我的雇主真的更喜欢我不这样做;如果他能提供IT级Git服务器,他会的。他的妥协是我找到了一种方法来获得launchdcron)任务,以将我桌面的裸Git仓库同步到SVN服务器上的并行仓库。

我建议的方法(可能不令人满意):

我还没有找到任何指南来克隆裸Git repos到Subversion,更不用说无人看管了。我的猜测是我必须通过工作副本完成所有工作,SVN同步(但可能不是自动化)是一个已解决的问题。

我天真的过程是:

  1. 从裸仓库中克隆从未编辑到/dont-touch的工作副本。
  2. 在非编辑/dont-touch目录中,git svn init <svn-url> -s
  3. 做必要的git svn fetchgit svn rebase舞蹈。
  4. 每晚,根据launchd发出的剧本:
    4.1。 cd /dont-touch
    4.2。 git fetch
    4.3。 git svn dcommit
  5. 问题,正如我看到的那样:

    我无知

    够了。

    这个类别包括我没有想过的所有事情。

    交互

    我们希望我们可以设置它,让同步脚本每24小时触发一次,然后忘掉它。

    我认为,在手动(1-3)设置期间,SVN身份验证将在第一次通过后进行缓存并自行处理。 Git身份验证不会成为问题,因为dont-touch工作副本将由与裸存储库相同的用户拥有,并且可以由file:///访问。

    但是我对Git与SVN同步的印象是它很脆弱,需要交互式压缩和折叠来避免损坏SVN仓库,更不用说让它工作了。

1 个答案:

答案 0 :(得分:1)

您可以将SubGit视为git-svn替代品。从2.0开始,它允许将本地Git与远程Subversion存储库相链接。你跑了一次:

$ subgit configure --svn-url <URL_of_SVN_project_root> repos.git
# edit repos.git/subgit/config, repos.git/subgit/authors.txt, and repos.git/subgit/passwd

$ subgit install repos.git
# now just work with repos.git as with usual git repository, but prefer "git pull --rebase" rather that "git pull" and "git merge --no-ff" rather than "git merge"

其中URL_of_SVN_project_root是包含trunk / branches / tags目录的URL。

然后克隆存储库'repos.git'并从/向/推/拉(可选择设置工作副本git config this way)。 'repos.git'中的特殊Git挂钩会将其与SVN同步。请注意,目前SubGit 2.0处于初级阶段,但我认为你描述的git-svn设置更可靠。