Svn 如何在将存储库从Mercurial转换为Subversion时保留修订时间戳?
由于工作政策,我被迫使用Subversion。目前,我已经使用Mercurial开发了一些代码,我必须将此存储库转换为新的Subversion存储库。当前Mercurial存储库还包含我从另一个SVN存储库(硬件驱动程序)复制的遗留代码部分,并且此代码包含在复制代码时展开的关键字(如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修订版的时间戳。此外,它还
$Id:…$
)
我目前的转换方法是:
hg convert --dest-type svn repository.hg repository.svn
不幸的是,它不能保留Mercurial修订版的时间戳。此外,它还扩展了一些遗留代码部分中的标记,其中有人编写了$Id:…$
东西
问题是:
EDIT:此后,我创建了一个脚本,可以从Mercurial导出文件中提取时间戳,并更新Subversion转储文件,该文件只不过是一个乱七八糟的文件,但它可以工作。不幸的是,
$Id:
问题仍未解决。这是一个棘手的问题。为什么要采用不同的解决方案:
这是Mercurial的一个扩展,允许您作为SVN客户端访问它,它能为您工作吗?我想重新推荐一个解决方案。在正常情况下,它用于使用hg
访问Subversion存储库,但如果您不怕处理变更集的历史记录,也可以使用它将Mercurial存储库转换为Subversion。(如果您知道如何使用变更集,那么您可以对流程进行相当多的控制。)
基本上,您必须执行以下步骤:
hg将此SVN路径(使用hgsubversion)拉入Mercurial存储库。为此,Subversion路径可能必须是非空的,但只要与Mercurial存储库中的文件没有重叠,就可以了
hg push
将结果发送回Subversion。从Subversion存储库的前一个头部开始的线性更改集将添加到Subversion路径中检查您可以使用的一些具体命令行命令。我曾在SVN上尝试过关键字替换,我必须向工作文件夹添加一个
SVN:keywords
属性,指明要替换的关键字。因此,删除此属性应该可以完成这项工作
可能与这个问题有关。据我所知,您现在的问题是:您有一个Hg存储库,它曾经从SVN转换而来,在那里使用了关键字扩展。现在,Hg回购协议中扩展的关键字保持不变。现在,您希望从Hg历史记录中删除这些关键字(或只是它们的扩展值),保留作者、日期/时间、提交消息,当然还有更改的文件 这只是一个想法,我从来没有在实践中这样做过,但是。。。说到mercurial,我认为可以通过结合通常的mercurial行为来实现这一点,只针对一个分支,不带标签和其他分支:
hg log>logfile.txt
- 从目标repo中删除所有工作文件
- 将变更集从源repo导出到目标repo的工作副本
- 更改工作文件中要执行的任何操作
hg addremove
hg提交-m-d-u…
也许还有更多的工作要做,但我认为这是可行的。如前所述,我从来没有这样做过。不幸的是,没有,政策是只拥有SVN存储库,而hgsubversion允许您使用具有多变语义的SVN存储库。但我的问题是将Mercurial存储库转换为SVN时。之后,hgsubversion可能是我使用的工具。不管怎样,谢谢你的建议。谢谢,我会再看一遍——它保留了修订的时间戳吗?不幸的是,它似乎没有。在我的测试中,Subversion提交有一个时间戳,该时间戳对应于它们被推送到SVN repo的时间点。太糟糕了:(我想知道为什么时间戳没有相应地调整,重要的是查看何时进行了更改。是的,但我想转换为Su