将谷歌代码上的两个subversion repo转换为github上的一个git repo



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

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

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

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

(1)以下是我如何将两个repo合并为一个git repo的元级别讨论。

  • 使用svnsync和svnadmin转储subversion存储库
  • 创建一个新的svn存储库,其中books repo安装在books中子目录
  • 从svn存储库中删除所有分支和标记(但保留他们的历史)
  • 将svn repo转换为git,规范化电子邮件以匹配github帐户电子邮件地址
  • 使用"bfg"删除历史记录中对分支和标记的所有引用
  • "重写"git历史记录以适应从内部服务器的移动多年前,ACL2系统主干向根的移动,以及把书搬上一层楼
  • 创建一个新的回购,并按照创建有序历史的时间戳
  • 将生成的回购推送到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) 您可以通过确保对于您关心的每个扩展,两个存储库中每个扩展的计数都相同来测试您的存储库。您也可以执行diff。请参阅https://github.com/ragerdl/svn-to-git/blob/master/quality-assurance.sh用于执行这些操作的脚本。

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

最新更新