代码之家  ›  专栏  ›  技术社区  ›  Jawa user2675589

从Git到SVN的关键选择(或者,如何在Git中保留项目历史和在SVN中保留发布)

  •  5
  • Jawa user2675589  · 技术社区  · 14 年前

    我是唯一一个使用Git的人,其他人都在使用SVN。我用了“git-svn”来连接到团队svn,而且大多数情况下它工作得很好。最近,我开始了一个独立的项目,独立的Git回购,现在我需要将它的内容合并到SVN。但是,我仍然希望在我自己的隐私中在发布之间不断调整实现。

    那么,从我的私人回购协议中挑选一些承诺到SVN克隆回购协议,最直接的方法是什么?要求是保持完整的本地历史记录,并且每个选择只有一个SVN提交。还是有一些挤压工作要做?

    作为实现这一点的一种方法,有没有一种方法可以将私有回购作为SVN克隆回购的另一个来源?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Community Jaime Torres    7 年前

    你可以试着 git graft 您的git repo提交到git svn repo之前的提交 git dcommit Git Svn回购。

    回购的承诺可能会被隔离在一个特殊的分支中,当 all kind of squashing 可以发生,以便导出更干净的历史记录。

        2
  •  1
  •   Andrew Aylett    14 年前

    如果你是目前唯一一个使用git repo的人,你可以考虑在你创建的空的Subversion克隆之上重新调整你所有的工作。然后建立一个分支,将您的推送放回Subversion,将每个发布压缩到它上面,并将其提交回SVN。

    要获得更深入的解决方案,请考虑使用 git commit-tree 直接——向它提供您想要提交的树(通过运行 git show --format=raw HEAD 查看第二行(“tree”)、正确的父提交(无论当前处于Subversion中的是什么),以及stdin上正确的日志消息。这是直接使用管道,你可能想写一个脚本来为你做这件事…其效果是,您已经创建了一个新的提交,其中包含现有提交的文件内容(与cherry pick相比,cherry pick采用现有提交添加的diff,而不是复制树)。