Summary:
我想要完成的是定期推送bare将 Git 存储库放入 Subversion 中,以便其他人可以使用无人值守的脚本来检查它。我不需要相反的方向,SVN -> Git。
我希望有人能帮助我完成这件事。我见过的其他线程非常接近我所需要的,但没有一个有完整的、合理的解决方案。将现有的 git 存储库推送到 SVN https://stackoverflow.com/questions/661018/pushing-an-existing-git-repository-to-svn非常有帮助。
我的问题:
我的雇主维护着一个 Subversion 服务器,该服务器具有异地备份、冗余功能,并且可以通过 Web 界面访问,以便我的同事和经理可以进行临时审查。
我在 Git 下有六个项目。 (我有多台机器,我做了很多推测性分支,而且我经常提交。而且,Xcode 与 Git 一起工作得更好。我们的 SVN 管理员同意 Git 对我来说几乎是不可协商的。)我的台式机(由我的雇主及其场所拥有)上的裸存储库,所有工作副本都跟踪。
我的雇主真的希望我不那么做;如果他能提供 IT 级的 Git 服务器,他就会提供。他的妥协是我想办法得到launchd
(cron
)任务将我的桌面的裸 Git 存储库同步到 SVN 服务器上的并行存储库。
我提出的方法(可能不令人满意):
我还没有找到任何将裸露的 Git 存储库克隆到 Subversion 的指南,更不用说在无人值守的情况下进行操作了。我的猜测是,我必须通过工作副本来完成所有工作,其中 SVN 同步(但可能不是自动化)是一个已解决的问题。
我天真的过程是:
- 克隆一个工作副本never编辑成
/dont-touch
,来自裸仓库。
- 在没有编辑的情况下
/dont-touch
目录,git svn init <svn-url> -s
- 做必要的事
git svn fetch
and git svn rebase
dance.
- 每天晚上,根据由
launchd
:
4.1. cd /dont-touch
4.2. git fetch
4.3. git svn dcommit
我所看到的问题是:
我无知
说够了。
这个类别包括了所有我没有想到的东西。
互动性
我们希望能够进行此设置,让同步脚本每 24 小时触发一次,然后忘记它。
我认为,在手动 (1-3) 设置期间,SVN 身份验证将被缓存并在第一次通过后自行处理。 Git 身份验证不会成为问题,因为dont-touch
工作副本将由与裸存储库相同的用户拥有,并且可以通过file:///
.
但我对将 Git 同步到 SVN 的印象是它很脆弱,并且需要交互式的操作来避免损坏 SVN 存储库,更不用说简单地让它工作了。
你可以看看SubGit http://subgit.com作为 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 configthis way http://subgit.com/book/index.html#N2043D)。 “repos.git”中的特殊 Git 挂钩会将其与 SVN 同步。请注意,目前 SubGit 2.0 处于 eap 阶段,但我认为它比您描述的 git-svn 设置更可靠。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)