我可以在不连接远程服务器的情况下从SVN导入Git吗?

时间:2012-12-29 16:34:27

标签: git svn git-svn

  

可能重复:
  How to git-svn clone the last n revisions from a Subversion repository?

我正在尝试将我在WordPress插件仓库中托管的WordPress插件移动到Git。

我累了使用git-svn并且花费的时间太长(单个插件超过4-5小时)而且我有近20个要迁移的插件。

我在我的机器上检查了SVN回购。有没有什么方法可以通过使用存储在.svn文件夹中的历史信息而不连接到SVN服务器来将SVN repo导入Git?

3 个答案:

答案 0 :(得分:7)

您的计算机上没有SVN repo 。您有工作副本

与Git不同,SVN在签出工作副本时不会下载整个历史记录。它只下载了最新版本的文件。

所以不,从工作副本中获取SVN项目的历史是不可能的。

答案 1 :(得分:3)

TL; DR

没有。但是,你有一些选择。

Git和SVN历史

Git和SVN处理历史的方式完全不同。当您签出SVN存储库时,.svn目录仅保存最新的提交,以便可以将其与工作目录进行比较或还原。

另一方面,Git克隆了整个历史。有一些例外,例如shallow clones,但是对于大多数用途,Git需要一个完整的存储库来执行显示历史记录或计算差异的事情。

如果您不介意截断的历史记录,可以查看--depth的{​​{1}}或--revision标记。这些标志将允许您限制从SVN存储库检索的修订数量,交易历史记录和速度功能。

但是,虽然您可以将SVN工作副本导入为新的Git存储库,但.svn目录不包含任何实际历史记录。您必须连接到SVN存储库才能访问历史记录,因此无法从工作副本导入。

Mirror Subversion First

但是,您可以考虑镜像Subversion存储库,然后针对镜像在本地运行git-svn。您仍然需要SVN存储库的完整副本,但镜像存储库所花费的时间比检索Subversion通过git-svn的网络连接一次提交一样少。

请注意,您仍然无法按照自己的意愿行事,但这是提高SVN-> Git迁移速度的另一种可行方法。除了速度提升之外,这还将在Git方面产生更完整的历史记录。

答案 2 :(得分:1)

    工作副本中的
  1. .svn目录不包含repo的完整历史记录,仅包含WC中的数据“原始副本”(以及一些其他元数据) - 如果不与repo进行交互,您将无法获得完整的历史记录< / LI>
  2. 如果您希望更快地完成处理,可以尝试执行此操作,但需要支付本地光盘空间的费用
  3. 建议的工作流程可能是这样的:

    • 获取本地(文件:///到达)SVN-repos,由插件分隔(一个插件 - 一个repo)。这样,您将获得(在转换阶段)对源数据的最快访问以及对来自存储库的不相关(对于已处理插件)部分的过滤提交的不必要性。使用svnadmin dump| svndumpfilter svnrdump | svndumpfilter来准备已清理的转储。可能一个完整的svnrdump并在以后cat DUMP| svndumpfilter include过滤它会更加节省时间;
    • 导入上一步准备的Git小回购。