由于工作政策,我被迫使用Subversion。目前我已经使用Mercurial开发了一些代码,我必须将此存储库转换为新的Subversion存储库。当前的Mercurial存储库还包含我从另一个SVN存储库(一个HW驱动程序)复制的遗留代码部分,此代码包含在复制代码时扩展的关键字(如$Id: ...$
)。
我目前进行转换的方法是:
hg convert --dest-type svn repository.hg repository.svn
这很有效,遗憾的是它不会保留Mercurial修订版的时间戳。此外,它还扩展了某些遗留代码部分中的标记,其中有人写了$Id: ...$
个东西。
问题:
很抱歉,如果这个问题已经得到解答,我已经与谷歌和此处进行了密切的搜索,但我找不到这个问题的答案。特别是时间戳问题必须是其他人已经遇到过的问题。
干杯, 小时。
编辑:我已经创建了一个脚本,从Mercurial导出文件中提取时间戳并更新Subversion转储文件,这只不过是一个kludge,但它确实有效。不幸的是,$Id:
问题仍未得到解决。
答案 0 :(得分:3)
这是一个棘手的问题。为什么以不同方式处理解决方案:
https://bitbucket.org/durin42/hgsubversion/wiki/Home
这是Mercurial的扩展,它允许您作为SVN客户端访问它,它可以为您工作吗?
答案 1 :(得分:2)
我想重新建议hgsubversion作为解决方案。在正常情况下,它用于使用hg
访问Subversion存储库,但如果您不害怕处理更改集的历史记录,则可以使用它将Mercurial存储库转换为Subversion。 (如果您知道如何使用变更集,则可以对该过程进行相当多的控制。)
基本上,您必须执行以下步骤:
hg pull
此SVN路径(使用hgsubversion)创建到Mercurial存储库中。 Subversion路径可能必须非空,但只要Mercurial存储库中的文件没有重叠,这应该没问题。hg push
将结果发送回Subversion。从Subversion存储库的前端开始的线性变化集将添加到Subversion路径中。检查this blog article以获取可以使用的一些具体命令行命令。
答案 2 :(得分:2)
我在SVN上尝试了一次关键字替换,我不得不在工作文件夹中添加svn:keywords
属性,指明要替换的关键字。因此,删除此属性应该可以胜任。
This article on Stack Overflow可能与此问题有关。
答案 3 :(得分:1)
据我所知,您现在的问题是:您有一个Hg存储库,该存储库曾经从SVN转换过,其中使用了关键字扩展。现在,扩展的关键字在Hg仓库中保持不变。您现在想要从Hg历史记录中删除这些关键字(或只是它们的扩展值),保留作者,日期/时间,提交消息,当然还有更改的文件。
这只是一个想法,我从来没有在实践中做到这一点,但是...只是说善变,我认为可以通过常见的mercurial行为,只为一个分支和没有标签和其他的组合来做到这一点分支:
hg log > logfile.txt
hg addremove
hg commit -m ... -d ... -u ...
缺点是更改集将获得新的哈希值,因此需要更新标记和书签。
如果还有其他分支需要迁移:
也许还有一些工作要做,但我认为这可行。如前所述,我从未这样做过。