【问题标题】:Git-svn/hgsubversion clone of a renamed project重命名项目的 Git-svn/hgsubversion 克隆
【发布时间】:2012-11-30 08:26:56
【问题描述】:

我有一个 SVN 项目,我想克隆到 Git 或 Mercurial。克隆到两个 VCS 工作正常,除了一个主要问题 - 我总是只得到最后一个修订版,没有任何其他历史记录。

我可以清楚地看到问题的根源是SVN项目最近被重命名(重命名是最后一次修订,我唯一设法得到的)。使用 SVN,我可以毫无问题地查看项目背后的所有历史。

最奇怪的是,当我使用 git-svn clone 时,我可以看到它经历了无数次修订,据说是导入它们,但最后我仍然只得到一个修订。与 Git 不同的是,向后工作的 Mercurial 只接受最后一次修订并完成克隆。

另外,重要的是要注意,最后一个 SVN 项目重命名/移动并不是唯一的。在此之前至少还有两个其他重命名,我确实需要完整的项目历史,就像我使用 SVN 看到的一样。

【问题讨论】:

  • 什么是“项目重命名”?我不知道如何将其翻译成 SVN 术语。根文件夹重命名?您可以只克隆一小部分修订并在以后提取其他修订,对于更改的路径,使用 --filemap 将旧位置和新位置映射到一个永久位置
  • 是的,这就是我的意思——项目的根文件夹被重命名了。不是只有 Mercurial Convert 扩展使用 --filemap 吗? Convert 对我来说并不理想,它不如 hgsubversion 灵活。我需要继续使用 SVN,而不仅仅是将 SVN 存储库转换为 Mercurial。此外,这正是问题所在 - 除了最后一个之外,我无法克隆任何修订。即使我指定了其他版本。
  • 1.文件映射和其他 *maps 可以在 hg clone 中使用,当克隆用于“外国”回购 2。您可以尝试在 URL 中使用 PEG-revision 与旧路径进行克隆
  • 是的,我尝试指向旧路径并使用@REV_NO 指定修订版,出于某种原因,hg 说它在该位置找不到任何东西。虽然我可以使用 SVN 浏览相同的位置。

标签: svn git-svn hgsubversion


【解决方案1】:

想法

  • 因为不可能用 PEG-revision 克隆不存在的 svn-URL

    hg clone http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/Greetings@16

    abort: HTTP Error 404: Not Found

就算

svn ls http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/Greetings@16
Hello.txt

您可以尝试克隆 repo,使用父 od 重命名目录作为 root。对于同级路径,您将获得很多不相关的变更集,但是(如果重命名是公平的 svn move)我希望,所有路径问题的变更集都将在 repo 中:您只有清理历史记录

  • 拆分和合并

转储 SVN-repo,使用 svndumpfilter 将其拆分为单独的转储(根据更改的目录名称转储),将转储加载到单独的 svn-repos,将每个 svn-repo 克隆到自己的 Mercurial 回购(回购不能有多个颠覆origin),将 repos 拉入公共,修复历史记录

【讨论】:

  • 是的,克隆父文件夹的一个简单但好主意。我现在刚试过。可悲的是,hg 一直因“无法读取卡盘尺寸”错误而死于其中一个修订版。另一方面,Git 做同样的事情也很好(尽管像往常一样,以非常缓慢的方式)。感谢您的陪伴。如果您有任何其他想法,请随时添加:)
【解决方案2】:

对于mercurial,我看到this guide 可能会有所帮助。右侧与git-svn 相关的其他问题足以解决您的问题。

我假设你看到了this,这是一个由Parrot 项目完成的关于 git-svn 的教程。进一步看来,您需要在git log 之后执行git rebase 以确定您要使用的修订哈希码。和以前一样,如果您需要更多信息,请发表评论。

【讨论】:

  • 您链接的 Mercurial 指南是我在尝试使用 hgsubversion 时看到的第一件事。它描述了 Hg-SVN 网桥的基本过程。正如我所说,我可以创建那座桥梁。只是我无法获得所有的 SVN 历史记录,这背后有一个特定的原因。该指南没有提及这一点。至于 git-svn,我只找到了一个与我所处的确切情况相关的问题,但事实证明它对我没有多大用处。
  • 嗯,是的,我看到的唯一方法是在每次重命名之前克隆修订范围,然后合并它们。我尝试从旧版本中克隆旧仓库,例如 git svn clone -r 1:2 /path/to/svn@2 但它没有用......
猜你喜欢
  • 1970-01-01
  • 2020-04-06
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多