将googlecode上的两个subversion repos转换为github上的单个git repo

时间:2014-09-02 22:38:56

标签: git svn github git-svn google-code

(1)如何将两个subversion repos,其中一个是另一个外部转换为github上的单个git repo?我希望历史记录是交错的,以便gitk输出有意义!

(2)为什么我要使用svnadmin转储而不只是git clone然后移动它们?

(3)如何测试我的新存储库以查看它与旧的存储库对匹配?

为了回答问题,假设两个subversion存储库位于http://acl2-devel.googlecode.com/svnhttp://acl2-books.googlecode.com/svn,并且两个存储库都使用标准svn布局(主干,分支,标记)进行设置。此外,假设我想要一个干净的休息,并希望分支和标签重新开始。

1 个答案:

答案 0 :(得分:1)

(1)这是关于我将两个repos组合成一个git repo的做法的元级别讨论。

  • 使用svnsync和svnadmin
  • 转储两个subversion存储库
  • 创建一个新的svn存储库,其中书籍repo安装在书籍中 子目录
  • 从svn存储库中删除所有分支和标记(但离开 他们的历史)
  • 将svn repo转换为git,规范化电子邮件以匹配github 帐户电子邮件地址
  • 使用“bfg”
  • 删除历史记录中对分支和标记的所有引用
  • “重写”git历史记录以适应从内部服务器的移动 很多年前,ACL2系统干线的移动到了root,而且 将书籍移动到一个水平
  • 创建一个新的仓库并按顺序“挑选”4000多个提交 时间戳创建一个精美的历史记录
  • 将最终的回购推送到github

实现上述目标的脚本很长,可在以下位置获得:     https://github.com/ragerdl/svn-to-git/blob/master/convert-acl2-books-svn-and-acl2-devel-svn-to-git.sh

(2)为什么不在两个存储库上使用git svn clone然后合并它们呢?

因为,当我进入樱桃采摘步骤时,存在大量冲突。按此顺序执行它可以避免这些冲突。

(3)您可以通过确保对于您关心的每个扩展,在两个存储库中每个扩展的计数相同来测试您的存储库。你也可以执行差异。有关执行这些操作的脚本,请参阅https://github.com/ragerdl/svn-to-git/blob/master/quality-assurance.sh

我意识到复制+粘贴代码会很好,但是有很多,这是我的第一次切割。如果其他人想要清理我编写的脚本并将其粘贴到此处,我们将不胜感激。我不认为这是社会的真正增值,除了我花了很多时间阅读别人的帖子,我找不到这个问题的答案。因此,我认为这个答案应该在搜索引擎很容易找到的地方。