[ Log On ]

SVN转Mercurial

最近在公司从svn换到mercurial(为什么不用TFS?因为那是要钱的,而且好贵),我们组的project的转换工作就叫我给做。总的来说用hg convert都可以很方便的从svn换到mercurial。可是有些地方还是需要注意一下,记录一下吧,也许能帮到需要的朋友。

其中一个project,trunk,tags,branches不是用默认的写法,第一个字母是大写。在hg convert的时候要加上下面几个参数

hg convert --config convert.svn.branches=Branches --config convert.svn.tags=Tags --config convert.svn.trunk=Trunk SourcePath DestinationPath

其中的Branches,Tags和Trunch就是你自己svn相应的名字。

还有一个问题就是在build的过程中,发现在svn里面build好好的,换到mercurial就compile不了了。后来发现是因为在转换的过程中,所有的空目录都没有被version control。原来这是mercurial的特性决定的。在svn中,文件和目录都可以被version control。而在mercurial中,只有文件会被version control.当你clone或者pull changes的时候,mercurial如果发现某个文件路径的目录不存在,他会自动创建。同样的,当删除文件的时候,如果mercurial发现你刚刚删掉的文件路径包含空目录,他也会自动把那个目录remove掉(注意是从version control remove掉,不是从file system中delete掉)。但是有时候确实需要有空目录,比如我在build过程中,如果那个空目录不存在就会使下面的compile失败。对于这个,有2中解决办法(其实也不是solution,就是workaround):一是在空目录下建立一个无关痛痒的文件,比如在linux下建立以.开头的隐藏文件,或者建议一个README.txt说明一下这个目录的用途,然后把这个文件version control。二是在需要那个空目录的时候在创建,比如在我的情况下,就可以在build process里面,在需要的时候创建目录。


Add your Comment


Supported UBB tags: [b],[u],[i],[color]