代码之家  ›  专栏  ›  技术社区  ›  yawn

向Git存储库的根目录预先提交一次提交/将Git导出到Subversion

  •  3
  • yawn  · 技术社区  · 15 年前

    我想导出Git存储库( G )到SVN存储库( S ) S 已使用标准布局(分支/标记/中继)初始化,并且 G 至今已有发展史。我听从了 Google Open Source Blog 哪些详细说明了出口 G 艾斯 S 作品。基本上,博客建议 GIT-SVN克隆 S 进入一个空目录, 取来 G 进入临时状态。分支和 重新平衡 这样就成为了第二个Git存储库。( G’ )

    我既不想放弃不受源代码管理的文件,也不想放弃源代码上不可用的分支。这就是我不想继续工作的原因 G' 而是用 G . 有没有方法取回表示布局提交的新提交 S ?我没有成功尝试 合并 G’ 进入之内 (当然没有共同的祖先)。

    2 回复  |  直到 15 年前
        1
  •  3
  •   legoscia    15 年前

    你应该能够合并 G’ G 使用 git merge --strategy=ours 也就是说,通过忽略祖先并创建一个使用树 G’ 但似乎都有父母的承诺。结果会有点难看,因为历史记录将包含每个提交的两个副本,但是您应该能够继续工作 G 无缝连接。

        2
  •  2
  •   Dan Moulding    15 年前

    我不确定是否有一种更简单的方法来添加初始提交,但是有一种相当简单的方法可以让它看起来好像SVN布局从一开始就存在。

    你可以使用 git filter-branch 要重写历史记录,使每个文件都存在于svn“trunk”目录下,从第一次提交开始:

    git filter-branch --tree-filter 'mkdir trunk; git ls-files | xargs -I {} mv {} trunk'
    

    如果需要,您也可以将文件移到标记和分支目录,但是如何决定移到那里完全取决于分支的用途,或者何时将标记添加到历史记录中。