【问题标题】:How to import a deleted path in a svn repositroy into git or mercurial如何将 svn 存储库中已删除的路径导入 git 或 mercurial
【发布时间】:2010-12-08 10:57:03
【问题描述】:

我需要对我们公司 svn 存储库中 svn 删除路径中的源进行一些研究。因为我需要大量使用注释,所以我想在 mercurial 或 git 中拥有历史。到目前为止我试过了:

  • hgsubversiongit-svn:对于这两个程序,我都找不到方法来指定我需要路径存在的旧版本,都尝试 svn HEAD 并失败因为那里的路径被删除了。
  • hgsvn:它找到旧路径(带有 peg 修订版),但未能进行初始更新,因为它想从 svn HEAD 修订版中获取日志,其中所需路径不存在没有了。

那么有没有办法将已删除的 svn 路径导入到 git 或 hg 中?

【问题讨论】:

  • 是否可以在过滤后的输入上执行svnadmin dump 后跟svnadmin load,即。去掉删除你想要的文件夹的变更集?

标签: git mercurial git-svn hgsubversion


【解决方案1】:

假设路径在修订版 117 中被删除,以下内容应该适用于 hgsubversion:

hg clone -r 116 http://svn.example.com/whereever

(我最近没有测试过这个,但它应该可以工作。如果没有,那就是一个错误......)

您还应该注意,尽管 khmarbaise 声称,关闭 Mercurial 中的分支并不会将其从历史记录中删除。除非给出-c/--closed 参数,否则关闭分支只会将其隐藏在hg heads 之外。

【讨论】:

  • Arrgh,我刚刚查看了我的 .zsh_history,我真的错过了 -r 选项。 grml
【解决方案2】:

据我所知,git 和 hg 都不能处理已删除的路径。如果您在 git 中删除一个分支,该分支将从历史记录中删除。

【讨论】:

  • 但是在svn中不是这样的,所以你可以使用git-svn查看被删除的分支。
【解决方案3】:

从您的问题中不清楚为什么需要 git 或 hg。你可以使用svn annotate。在 SVN 中分析删除的对象是没有问题的,你可以像这样使用peg revision

svn annotate http://example.com/svn/somefile@321

即使某些文件在修订版 321 之后的某个时间已被删除或重命名,这仍然有效。

编辑:经过考虑,我猜您想要 hg/git,因为拥有存储库的本地副本可能会大大加快注释速度。您可以通过使用 svn 在本地文件系统上使用 svnsync 创建镜像存储库并使用 file:/// URL 访问它来实现相同的目的。

【讨论】:

  • 你猜对了每个工具的速度(在这里对错误的文件运行 svn blame 意味着等待大约 30 秒),但当你搜索特定行时,hg grep 也做得很好从文件中消失。
  • @Rudi:也许svnquery 可以帮忙?我还没有测试它,但它应该比hg grep 更快,因为它为存储库建立了索引。
猜你喜欢
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多