将mercurial存储库转换为svn

时间:2015-07-07 13:34:09

标签: svn mercurial

我正在尝试将mercurial(hg)存储库转换为Subversion(svn)。 (原因是我使用的是一个使用SVNKit的工具,我希望在hg repo的数据上运行它。)

为此,我运行了Mercurial转换扩展程序:

hg convert --dest-type svn mercurialrepo svnrepo

这一切看起来都正常,因为它从这个输出开始:

initializing svn working copy 'svnrepo-wc'
scanning source...
sorting...
converting...
4336 Some commit message
4335 Some other commit message

直到它向我发出消息abort: svn exited with status 1

4175 Another commit message
abort: svn exited with status 1

知道这意味着什么和/或如何解决它?

此外,看起来他已经转换了160个修订版,但是当我进入svn工作副本并执行svn log时,它只显示了35个版本!

更新:根据DJanssens的建议添加--debug和--traceback标志:

这是最后一个很好的:

4302 Removed file ProjectService in ext
source: afb26afbb72ba500fcb0b42c3c386540fbfa11fa
converting: 34/4337 revisions (0.78%)
getting files: historia4-web/src/main/webapp/META-INF/maven/be.vlaanderen.awv.historia4/historia4-web/pom.properties 1/3 (33.33%)
getting files: historia4-web/src/main/webapp/index.jsp 2/3 (66.67%)
getting files: historia4-web/src/main/webapp/js/be/vlaanderen/awv/historia4/services/ProjectService.js 3/3 (100.00%)
running: 'svn' 'delete' 'historia4-web/src/main/webapp/js/be/vlaanderen/awv/historia4/services/ProjectService.js'
D         historia4-web/src/main/webapp/js/be/vlaanderen/awv/historia4/services/ProjectService.js
running: 'svn' 'commit' '--username=schoovlo' '--file=/var/folders/q1/pxdczzk90xz28qdkk3r0krsw0000gn/T/hg-convert-SVLDzc' '--encoding=utf-8'
Sending        historia4-web/src/main/webapp/META-INF/maven/be.vlaanderen.awv.historia4/historia4-web/pom.properties
Sending        historia4-web/src/main/webapp/index.jsp
Deleting       historia4-web/src/main/webapp/js/be/vlaanderen/awv/historia4/services/ProjectService.js
Transmitting file data ..
Committed revision 35.
running: 'svn' 'propset' 'hg:convert-branch' 'HISTIV-8-projectDef' '--revprop' '--revision=35'
property 'hg:convert-branch' set on repository revision 35

这里开始做奇怪的事情:

4301 HISTIV-8-projectDef afgerond
source: 55f79e40185fe81420008da5489e5736bb938818
converting: 35/4337 revisions (0.81%)
running: 'svn' 'commit' '--username=schoovlo' '--file=/var/folders/q1/pxdczzk90xz28qdkk3r0krsw0000gn/T/hg-convert-VBOvIH' '--encoding=utf-8'
4300 HISTIV-8 merged into default
source: dc46a9b84cebf41cd1cc1a771678a14c2cbce780
converting: 36/4337 revisions (0.83%)

最后我得到了:

4175 Wat wijzigingen en optimalisaties
source: efd1149f1f767e2f3afff2bc1f5573041c446b5f
converting: 161/4337 revisions (3.71%)
getting files: historia2-data-import/src/main/java/be/vlaanderen/awv/etl/common/transformers/CachedLookupTransformer.groovy 1/2 (50.00%)
getting files: historia2-data-import/src/main/java/be/vlaanderen/awv/etl/common/transformers/SourceDestColumnMapper.java 2/2 (100.00%)
running: 'svn' 'delete' 'historia2-data-import/src/main/java/be/vlaanderen/awv/etl/common/transformers/CachedLookupTransformer.groovy' 'historia2-data-import/src/main/java/be/vlaanderen/awv/etl/common/transformers/SourceDestColumnMapper.java'
svn: E155007: '/Users/quinten/Desktop/EXPERIMENT/TEST_SELECTION_QMINO/QMINO/cloneSVN/cloneSVN-wc/historia2-data-import/src/main/java/be/vlaanderen/awv/etl/common/transformers/CachedLookupTransformer.groovy' is not a working copy
run hg source post-conversion action
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/mercurial/dispatch.py", line 138, in _runcatch
return _dispatch(req)
  File "/Library/Python/2.7/site-packages/mercurial/dispatch.py", line 819, in _dispatch
cmdpats, cmdoptions)
  File "/Library/Python/2.7/site-packages/mercurial/dispatch.py", line 599, in runcommand
ret = _runcommand(ui, options, cmd, d)
  File "/Library/Python/2.7/site-packages/mercurial/dispatch.py", line 910, in _runcommand
return checkargs()
  File "/Library/Python/2.7/site-packages/mercurial/dispatch.py", line 881, in checkargs
return cmdfunc()
  File "/Library/Python/2.7/site-packages/mercurial/dispatch.py", line 816, in <lambda>
d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
  File "/Library/Python/2.7/site-packages/mercurial/util.py", line 518, in check
return func(*args, **kwargs)
  File "/Library/Python/2.7/site-packages/hgext/convert/__init__.py", line 283, in convert
return convcmd.convert(ui, src, dest, revmapfile, **opts)
  File "/Library/Python/2.7/site-packages/hgext/convert/convcmd.py", line 527, in convert
c.convert(sortmode)
  File "/Library/Python/2.7/site-packages/hgext/convert/convcmd.py", line 444, in convert
self.copy(c)
  File "/Library/Python/2.7/site-packages/hgext/convert/convcmd.py", line 412, in copy
source, self.map)
  File "/Library/Python/2.7/site-packages/hgext/convert/subversion.py", line 1257, in putcommit
self.xargs(self.delete, 'delete')
  File "/Library/Python/2.7/site-packages/hgext/convert/common.py", line 386, in xargs
self.run0(cmd, *(list(args) + l), **kwargs)
  File "/Library/Python/2.7/site-packages/hgext/convert/common.py", line 341, in run0
self.checkexit(status, output)
  File "/Library/Python/2.7/site-packages/hgext/convert/common.py", line 337, in checkexit
raise util.Abort('%s %s' % (self.command, msg))
Abort: svn exited with status 1
abort: svn exited with status 1

显然它不喜欢* .groovy文件。 我的下一步是使用filemap选项排除有问题的文件:

hg convert --debug --traceback --filemap filemap --dest-type svn . cloneSVN 

使用filemap包含以下内容的文件:

exclude whateverfileismakingtheproblem

但是,同样的问题会在不同的文件中发生。

我现在看到它的方式,问题是在某些时候有一个修订,其中文件X被删除。但是之前出现了问题,当转换器由于某种原因跳过了添加文件X的修改。所以svn然后抱怨说我们正在删除那些首先没有被删除的内容。

1 个答案:

答案 0 :(得分:1)

不是Mercurial专家以任何方式,但我会建议一些(自己的)观察和想法

  1. 您必须在转化时使用base.TransformText(); 附加参数
  2.   

    REVMAP是一个简单的文本文件,它将每个源提交ID映射到每个修订的目标ID

    Convert Extension wiki

    在理想的转换情况下(完全转换,没有错误)REVMAP文件上的左列将与

    相同
    REVMAP

    我的REVMAP的一部分和SRC-repo的日志

    hg log -T "{node}\n" -r :
    

    你的情况下,它会在第一次被修剪掉#34;坏&#34;变更集,但在REVMAP中(将其与日志进行比较),您将能够找到跳过的早期变更集

    1. 转换扩展只能转换部分repo(2c96d0cff382e13bb39d1b064ed098cbab230142 svn:d4a602fb-2afa-8b43-af74-725bfcbd86c9@1 3f05a3b07a29e8772e22cca847ce07e461d972f5 svn:d4a602fb-2afa-8b43-af74-725bfcbd86c9@2 696aa5701fd7822fec76cc1b7b203ad1772e38c8 svn:d4a602fb-2afa-8b43-af74-725bfcbd86c9@3 2f09429039a6d062d8135f652bbcb8be7a798443 svn:d4a602fb-2afa-8b43-af74-725bfcbd86c9@4 97419f57d7db28ace15066df7fb7ec7692536a30 svn:d4a602fb-2afa-8b43-af74-725bfcbd86c9@5 2c96d0cff382e13bb39d1b064ed098cbab230142 3f05a3b07a29e8772e22cca847ce07e461d972f5 696aa5701fd7822fec76cc1b7b203ad1772e38c8 2f09429039a6d062d8135f652bbcb8be7a798443 97419f57d7db28ace15066df7fb7ec7692536a30 参数),如果是顺序使用

      hg convert --dest-type svn SRC DST REVMAP -r N

    2. -rDST未被更改,转换执行增量转换和REVMAP其他转换到REVMAP,而不是在每一步都覆盖它。即,我将40-changesets SRC转换为单>>hg convert --dest-type svn SRC DST REVMAP,并得到相同的DST。通过这种方式,您可以尝试仅转换有问题(在步骤1中标识为跳过)修订而无需重做所有工作(转换为hg convert --dest-type svn SRC DST REVMAP -r (10|20|30|40)一次,-r $SKIPPED-1转换次数以后)。也许你会用这样的&#34; skippable&#34;填写错误报告。由于您的研究(作为最后的手段)而改变Mercurial开发人员,他们将能够在他们身边改变一些东西

      1. 如果你的任务不是准备转换的奇怪,但是获得结果(可用的SVN-repo),你可以考虑转换&#34;使用-r $SKIPPED到SVN并推送到SVN-repository(创建空的SVN-repo,使用任何访问协议发布它除hgsubversion之外,推送到repo /可能与{{ 1}},如果&#34;存储库无关&#34; /)