如何插入或更改mercurial修订版

时间:2010-08-27 23:11:23

标签: mercurial hgsvn

如何更改r0,以便我在创建存储库或在当前.hgignore之前插入提交时添加r0

我刚刚使用hgsvn将一个庞大的SVN repo转换为mercurial。花了几个小时,不得不通过十几个分支来完成整个过程。我现在的问题是.hgignore未提交,所以当我hgimportsvn分支时,.hgignore似乎没有提交。我想将该文件作为r0的一部分插入或在此之前插入(并将所有内容移动1)。我也尝试在我的Mercurial主干结账时提交它,但似乎hgimportsvn始终克隆(分支?)来自我的SVN分支创建的相同Mercurial修订版,因此.hgignore再次丢失

2 个答案:

答案 0 :(得分:5)

你可能需要像ConvertExtension这样的东西。查看--splicemap选项。

要创建一个新的历史记录,并将.hgignore文件添加为第一个修订版:

  1. 创建一个新的存储库,其唯一的修订版是.hgignore commit。
  2. 创建一个包含两个40-char哈希值的splicemap文件:当前数据库的rev 0和新数据库的rev 0。
  3. 运行hg convert <current_db_dir> <new_db_dir> --splicemap splice_filename
  4. 这会将当前数据库中的每个修订添加到新数据库。 splicemap指定编辑父项,因此如果当前数据库的修订版0将其父项设置为新数据库的修订版0。

    下面是一个Windows批处理文件,它创建一个3版本的数据库和一个带有.hgignore文件的1版本数据库,将它们拼接在一起。结果应该是您正在寻找的。如果您有一个大型原始数据库,则可能需要一段时间,因为源数据库的整个历史记录会重新写入目标数据库。

    @echo off
    
    @REM Create a 3-revision database
    hg init current
    cd current
    echo >file1
    hg add
    hg ci -m file1
    echo >file2
    hg add
    hg ci -m file2
    echo >file3
    hg add
    hg ci -m file3
    
    @REM Add the first revision to the splice map
    hg log -r 0 --template "{node} " > ..\map
    
    @REM Display the result
    hg log
    cd ..
    
    @REM Create a 1-revision database
    hg init ignore
    cd ignore
    echo glob:*.txt>.hgignore
    hg add
    hg ci -m ignore
    
    @REM Specify this node as the parent of the other
    @REM database's first revision in the splice map
    hg log -r 0 --template "{node}\n" >> ..\map
    hg log
    cd ..
    
    @REM Here's the resulting splice map
    type map
    
    @REM Make a copy to store the result
    hg clone ignore result
    
    @REM Add revisions from "current" to "result" honoring
    @REM the splice map
    hg convert current result --splicemap map
    
    @REM Display the result
    cd result
    hg log
    

答案 1 :(得分:0)

也许你可以提交.hgignore,然后将提交重新命名为历史的开头(参见https://www.mercurial-scm.org/wiki/RebaseProject)。