3

概括:

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

我希望有人能帮我完成这件事。我看到的其他线程与我需要的非常接近,但没有一个具有完整、合理的解决方案。将现有的 git 存储库推送到 SVN非常有帮助。

我的问题:

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

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

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

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

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

我天真的过程是:

  1. 从裸仓库克隆一个从未编辑过的工作副本。/dont-touch
  2. 在 no-edits/dont-touch目录中时,git svn init <svn-url> -s
  3. 做必要的git svn fetchgit svn rebase跳舞。
  4. 每天晚上,根据 4.1触发launchd的脚本。 4.2. 4.3.
    cd /dont-touch
    git fetch
    git svn dcommit

我看到的问题是:

我很无知

说够了。

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

互动性

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

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

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

4

1 回答 1

2

你可以看看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 )。'repos.git' 中的特殊 Git 钩子会将其与 SVN 同步。请注意,目前 SubGit 2.0 处于 eap 阶段,但我认为您描述的 git-svn 设置更可靠。

于 2012-12-01T00:04:33.207 回答