8

我该如何更改r0,使它看起来像我.hgignore在创建存储库时添加或在我的当前之前插入提交r0

我刚刚使用 hgsvn 将一个巨大的 SVN 存储库转换为 mercurial。花了几个小时,不得不经过大约十几个分支机构才能得到整个东西。我现在的问题是它.hgignore没有提交,所以当我hgimportsvn是一个分支时,.hgignore它似乎并没有随之而来。我想将该文件作为其中的一部分r0插入或在其之前插入(并将所有内容移1)。我也尝试在 Mercurial 主干结帐结束时提交它,但它似乎hgimportsvn总是从我的 SVN 分支创建的同一个 Mercurial 修订版中克隆(分支?),因此.hgignore再次丢失。

4

2 回答 2

5

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

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

  1. 创建一个新的存储库,其唯一的修订是 .hgignore 提交。
  2. 创建一个包含两个 40 字符哈希的 splicemap 文件:当前数据库的 rev 0 和新数据库的 rev 0。
  3. hg convert <current_db_dir> <new_db_dir> --splicemap splice_filename

这会将当前数据库中的每个修订添加到新数据库中。splicemap 指定编辑父级,因此如果当前数据库的修订版 0 将其父级设置为新数据库的修订版 0。

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

@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
于 2010-08-28T00:10:08.853 回答
0

也许您可以提交 .hgignore 然后将提交重新设置为历史的开头(请参阅https://www.mercurial-scm.org/wiki/RebaseProject)。

于 2010-09-07T14:25:55.433 回答