追溯svn导入git

Pau*_*ham 10 svn git history

这是我的问题:

  1. 我使用Subversion一段时间,直到我切换到Git.还有一段时间过去了.
  2. 从Subversion到Git没有导入历史记录.这是严格的结账,删除.svn dirs,然后是git init.不是一个聪明的举动.
  3. 现在,数以千计的git提交后,我找到了第一次git提交发生时Subversion repo的备份.啊哈!

我想将git repo回滚到第0天,正确导入svn repo,然后重新应用所有git更改,从而纠正第一次没有完成的操作.

有人试过吗?我该怎么做呢?这听起来像是所有rebase的母亲.

Pie*_*ter 15

听起来像git移植的工作.这方面的文档有点粗略,但基本上你想要做的是:

  1. 在你的回购中获取svn的git-svn副本.最简单的方法是git svn clone in,然后获取现有存储库中的svn clone
  2. 找出应该遵循svn提交的基本提交.所以你可能有一个git root("上一个SVN版本")应该遵循上一个实际的SVN版本.这是你刚刚获取的git-svn克隆的负责人
  3. 创建一个文件.git/info/grafts并将两个sha放在一行上.第一个是第一个git提交,然后是空格,然后是最后一个svn提交.这告诉git git commit不是无父对象,但事实上最后一个svn提交为父对象.
  4. 您现在可以使用gitk/gitx /两个存储库连接的任何内容进行检查
  5. 要使更改成为永久更改,请运行git filter-branch.您可能希望首先阅读其联机帮助页.

当然,您也可以为所有分支执行第3步.jpalecek方法的问题在于,rebase会使你的历史变平,所以如果你有任何合并,那么rebase就会失去它们.过滤器分支方法可保持您的历史记录不变.