Как я могу вставить или изменить ртутную ревизию - PullRequest
8 голосов
/ 28 августа 2010

Как я могу изменить r0, чтобы выглядело, как будто я добавил .hgignore, когда создал свой репозиторий или вставил коммит перед моим текущим r0?

Я просто конвертировал огромный репозиторий SVN, используя hgsvnртутному.Это заняло несколько часов, и пришлось пройти около дюжины веток, чтобы получить все это.Моя проблема сейчас в том, что .hgignore не зафиксирован, поэтому, когда я hgimportsvn ветвь, .hgignore, похоже, не идет с ним.Я хотел бы вставить этот файл как часть r0 или вставить его до этого (и сдвинуть все на 1).Я также попытался зафиксировать его в конце проверки ствола Mercurial, но кажется, что hgimportsvn всегда клонирует (ветви?) Из той же ревизии Mercurial, из которой была создана моя ветка SVN, поэтому .hgignore снова теряется.

Ответы [ 2 ]

5 голосов
/ 28 августа 2010

Возможно, вам нужно что-то вроде ConvertExtension . Проверьте --splicemap вариант.

Чтобы создать новую историю с добавлением файла .hgignore в качестве первой ревизии:

  1. Создайте новый репозиторий, единственной ревизией которого является коммит .hgignore.
  2. Создайте файл сплайс-карты, содержащий два 40-символьных хеша: rev 0 вашей текущей базы данных и rev 0 вашей новой базы данных.
  3. Выполнить hg convert <current_db_dir> <new_db_dir> --splicemap splice_filename

Это добавляет каждую ревизию в текущей базе данных в новую базу данных. Splicmap определяет редактирование родителей, поэтому, если ревизия 0 текущей базы данных получает свой родительский набор с ревизией 0 новой базы данных.

Ниже приведен пакетный файл Windows, который создает базу данных с 3 ревизиями и базу данных с 1 ревизией с файлом .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
0 голосов
/ 07 сентября 2010

Может быть, вы могли бы зафиксировать .hgignore, а затем переместить его в начало истории (см. https://www.mercurial -scm.org / wiki / RebaseProject ).

...