我也需要这个,并且在Bombe的答案和一些摆弄的帮助下,我开始了它的工作。这是食谱:
导入Git-> Subversion
1. cd /path/to/git/localrepo
2. svn mkdir --parents protocol:///path/to/repo/PROJECT/trunk -m "Importing git repo"
3. git svn init protocol:///path/to/repo/PROJECT -s
4. git svn fetch
5. git rebase origin/trunk
5.1. git status
5.2. git add (conflicted-files)
5.3. git rebase --continue
5.4. (repeat 5.1.)
6. git svn dcommit
在#3之后,您将获得如下所示的隐秘消息:
使用更高级别的URL: protocol:///path/to/repo/PROJECT => protocol:///path/to/repo
只是忽略这一点。
当您运行#5时,可能会遇到冲突。通过添加状态为“未合并”的文件并恢复基准来解决这些问题。最终,您会完成;然后使用同步回SVN存储库dcommit
。就这样。
保持存储库同步
现在,您可以使用以下命令从SVN同步到Git:
git svn fetch
git rebase trunk
要从Git同步到SVN,请使用:
git svn dcommit
最后说明
在应用到实时存储库之前,您可能希望在本地副本上进行尝试。您可以将Git存储库的副本复制到一个临时位置。只需使用cp -r
,因为所有数据都在存储库本身中。然后,您可以使用以下方法建立基于文件的测试存储库:
svnadmin create /home/name/tmp/test-repo
并使用以下命令检出工作副本:
svn co file:///home/name/tmp/test-repo svn-working-copy
这样,您就可以在进行任何持久更改之前先尝试一下。
附录:如果您搞砸了 git svn init
如果您不小心git svn init
使用了错误的URL 运行,并且您不够聪明,无法备份您的工作(不要问...),则不能仅再次运行同一命令。但是,您可以通过发出以下命令来撤消更改:
rm -rf .git/svn
edit .git/config
并删除节[svn-remote "svn"]
部分。
然后,您可以重新运行git svn init
。