【问题标题】:Automatically sync Git to SVN自动同步 Git 到 SVN
【发布时间】:2012-11-19 04:47:46
【问题描述】:

总结:

我想要完成的是定期将一个 bare Git 存储库推送到 Subversion,以便其他人可以使用无人值守的脚本对其进行检查。我不需要相反的方向,SVN -> Git。

我希望有人能帮助我完成这项工作。我看到的其他线程与我需要的非常接近,但没有一个具有完整、合理的解决方案。 Pushing an existing git repository to SVN 非常有帮助。

我的问题:

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

我在 Git 下有六个项目。 (我有多台机器,我做了很多推测性的分支,而且我经常提交。此外,Xcode 与 Git 配合得更好。我们的 SVN 管理员同意 Git 对我来说几乎是不可协商的。)我一直这样做是通过保持一个我的桌面机器上的裸仓库(由我的雇主拥有并在其场所内),所有工作副本都会跟踪。

我的雇主真的希望我不这样做;如果他能提供一个 IT 级的 Git 服务器,他会的。他的妥协是我找到了一种方法来获取launchd (cron) 任务,以将我桌面的裸 Git 存储库同步到 SVN 服务器上的并行存储库。

我提出的方法(可能不令人满意):

我还没有找到任何将裸 Git 存储库克隆到 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

我看到的问题:

我很无知

说得够多了。

这个类别包括所有我没有想到的东西。

交互性

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

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

但我对将 Git 同步到 SVN 的印象是它很脆弱,需要交互式 nips 和 tucks 以避免损坏 SVN 存储库,更不用说让它工作了。

【问题讨论】:

  • 我认为,this answer 将满足您的大部分需求

标签: macos git svn sync


【解决方案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 处于 eap 阶段,但我认为您描述的 git-svn 设置更可靠。

【讨论】:

  • 这看起来很有趣。这将需要一些官僚机构让我能够对其进行测试,因此可能需要一段时间才能将其标记为我的首选答案,但这是一个很有希望的方向。
  • 好吧,我已经可以使用它了,它看起来很流畅,但是有一个障碍/误解:
  • (对不起;我点击返回并部分发布。)@dimitry-pavlenko 好的,我已经能够使用 subgit,它看起来非常顺利,但是有一个障碍/误解:您显示的subgit configure 命令暗示repos.git 可以是现有存储库。当我尝试这个时,我得到了CONFIGURATION FAILED,抱怨它无法配置一个非空的 Git 存储库。我真的希望不要从新的回购开始。更正?解决方法? subgit-2.0.0-EAP_2018
  • 看起来你已经找到了答案,但我还是把答案放在这里。您可以尝试从此issue 构建或等待下一个 EAP/发布版本。该命令应该完全按照我的描述工作。
  • 使用 subgit,是否应该将 subgit repo 保存在本地,或者可以将其放置在服务器上并供多个用户使用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
  • 2011-06-21
  • 2011-07-19
相关资源
最近更新 更多