Svn 如何在将存储库从Mercurial转换为Subversion时保留修订时间戳?

Svn 如何在将存储库从Mercurial转换为Subversion时保留修订时间戳?,svn,version-control,mercurial,Svn,Version Control,Mercurial,由于工作政策,我被迫使用Subversion。目前,我已经使用Mercurial开发了一些代码,我必须将此存储库转换为新的Subversion存储库。当前Mercurial存储库还包含我从另一个SVN存储库(硬件驱动程序)复制的遗留代码部分,并且此代码包含在复制代码时展开的关键字(如$Id:…$) 我目前的转换方法是: hg convert --dest-type svn repository.hg repository.svn 不幸的是,它不能保留Mercurial修订版的时间戳。此外,它还

由于工作政策,我被迫使用Subversion。目前,我已经使用Mercurial开发了一些代码,我必须将此存储库转换为新的Subversion存储库。当前Mercurial存储库还包含我从另一个SVN存储库(硬件驱动程序)复制的遗留代码部分,并且此代码包含在复制代码时展开的关键字(如
$Id:…$

我目前的转换方法是:

hg convert --dest-type svn repository.hg repository.svn
不幸的是,它不能保留Mercurial修订版的时间戳。此外,它还扩展了一些遗留代码部分中的标记,其中有人编写了
$Id:…$
东西

问题是:

  • 如何导出到Subversion,保留修订的时间戳
  • 如何在不展开$Id:$style关键字的情况下进行转换,或者更好的是,在转换时删除有问题的行。这是可能的,还是我必须在转换之前修改Mercurial转储的历史记录以确保不存在关键字
  • 很抱歉,如果这个问题已经得到了回答,我已经在这里和谷歌上进行了大量搜索,但我找不到这个问题的答案。特别是时间戳问题肯定是其他人已经遇到的问题

    干杯, H


    EDIT:此后,我创建了一个脚本,可以从Mercurial导出文件中提取时间戳,并更新Subversion转储文件,该文件只不过是一个乱七八糟的文件,但它可以工作。不幸的是,
    $Id:
    问题仍未解决。

    这是一个棘手的问题。为什么要采用不同的解决方案:

    这是Mercurial的一个扩展,允许您作为SVN客户端访问它,它能为您工作吗?

    我想重新推荐一个解决方案。在正常情况下,它用于使用
    hg
    访问Subversion存储库,但如果您不怕处理变更集的历史记录,也可以使用它将Mercurial存储库转换为Subversion。(如果您知道如何使用变更集,那么您可以对流程进行相当多的控制。)

    基本上,您必须执行以下步骤:

  • 使您的Mercurial历史线性化(这是Subversion所必需的);您可以使用将历史的任何非线性区域折叠为单个变更集
  • 创建Subversion存储库或目录,并
    hg将此SVN路径(使用hgsubversion)拉入Mercurial存储库。为此,Subversion路径可能必须是非空的,但只要与Mercurial存储库中的文件没有重叠,就可以了
  • 将Mercurial历史中的所有变更集重新设置为Subversion历史顶部的变更集。这是使用。如果没有重叠,这应该是一个自动操作
  • 使用
    hg push
    将结果发送回Subversion。从Subversion存储库的前一个头部开始的线性更改集将添加到Subversion路径中

  • 检查您可以使用的一些具体命令行命令。

    我曾在SVN上尝试过关键字替换,我必须向工作文件夹添加一个
    SVN:keywords
    属性,指明要替换的关键字。因此,删除此属性应该可以完成这项工作


    可能与这个问题有关。

    据我所知,您现在的问题是:您有一个Hg存储库,它曾经从SVN转换而来,在那里使用了关键字扩展。现在,Hg回购协议中扩展的关键字保持不变。现在,您希望从Hg历史记录中删除这些关键字(或只是它们的扩展值),保留作者、日期/时间、提交消息,当然还有更改的文件

    这只是一个想法,我从来没有在实践中这样做过,但是。。。说到mercurial,我认为可以通过结合通常的mercurial行为来实现这一点,只针对一个分支,不带标签和其他分支:

  • 克隆所需的源存储库
  • 准备一个空的Hg存储库
  • 对要更改的分支上的源repo执行
    hg log>logfile.txt
  • 解析文件,获得所有必要信息的结构化列表,如变更集编号、用户、日期和摘要,将其存储到数据结构中,以便于迭代
  • 遍历列表(或直接使用日志文件)并。。。
    • 从目标repo中删除所有工作文件
    • 将变更集从源repo导出到目标repo的工作副本
    • 更改工作文件中要执行的任何操作
    • hg addremove
    • hg提交-m-d-u…
  • 根据需要重复步骤5
  • 缺点是变更集将获得新的散列值,因此需要更新标记和书签

    如果有其他分支必须迁移:

  • 将目标回购更新到该分支的起点
  • 还有来源回购协议
  • 在此处插入上述列表中的步骤3至6

  • 也许还有更多的工作要做,但我认为这是可行的。如前所述,我从来没有这样做过。

    不幸的是,没有,政策是只拥有SVN存储库,而hgsubversion允许您使用具有多变语义的SVN存储库。但我的问题是将Mercurial存储库转换为SVN时。之后,hgsubversion可能是我使用的工具。不管怎样,谢谢你的建议。谢谢,我会再看一遍——它保留了修订的时间戳吗?不幸的是,它似乎没有。在我的测试中,Subversion提交有一个时间戳,该时间戳对应于它们被推送到SVN repo的时间点。太糟糕了:(我想知道为什么时间戳没有相应地调整,重要的是查看何时进行了更改。是的,但我想转换为Su