Как я могу пометить файл как произошедший от 2 других файлов в Mercurial? - PullRequest
0 голосов
/ 02 июня 2010

У меня было 2 похожих скрипта на Python, которые я с тех пор объединил в один (и теперь принимает некоторые параметры, чтобы соответствующим образом отличать поведение). Оба предыдущих файла находятся в кончике моего репозитория Mercurial. Как я могу указать, что новый файл представляет собой комбинацию из 2 более старых файлов, которые я намерен удалить?

Также обратите внимание, что один файл был выбран в пользу другого, и некоторый код переместился, поэтому, если невозможно создать файл с контролем версий с именем new , затем ассимилировать истории в другой будет достаточно.

Ответы [ 2 ]

1 голос
/ 02 июня 2010

Это не идеальное решение, и, возможно, на этот раз будет слишком поздно, но я думаю, hg rename приведет вас туда, куда вы хотите пойти. Вот последовательность:

ry4an@hail [~/hg] % mkdir test
ry4an@hail [~/hg] % cd test/
ry4an@hail [~/hg/test] % hg init
ry4an@hail [~/hg/test] % echo stuff > file1
ry4an@hail [~/hg/test] % echo different > file2
ry4an@hail [~/hg/test] % hg commit --addremove -m 'adding both separately'
adding file1
adding file2
ry4an@hail [~/hg/test] % hg rename --force file1 file2
ry4an@hail [~/hg/test] % hg commit -m 'overwrote 2 with 1'
ry4an@hail [~/hg/test] % hg grep --follow different file2
file2:0:different
ry4an@hail [~/hg/test] % hg grep --follow stuff file2 
file2:1:stuff

Обратите внимание, что файл 'grep' обнаружил, что 'stuff' был в файле 2 ревизии 1, а 'different' был в файле 2 ревизии 0, поэтому обе истории теперь находятся в файле 2.

1 голос
/ 02 июня 2010

Ниже приведен пример объединения двух не связанных между собой файлов "a" и "b".

Обратите внимание, что я злоупотребляю форматом списка, потому что не могу понять, как использовать эту систему. Строки, которые выглядят как заголовки, но начинаются как «summary:», на самом деле выводятся из hg и оказываются последней строкой перед пустой строкой. Все остальные заголовки являются моими собственными комментариями, объясняющими команду / последовательность и ее вывод. Команды отображаются в строке с именем timeless-mbp: ... $. Все остальные строки выводятся.

Настройка

timeless-mbp:~ timeless$ cd /tmp
timeless-mbp:tmp timeless$ rm -rf q
timeless-mbp:tmp timeless$ hg init q
timeless-mbp:tmp timeless$ cd q

Определить мое имя пользователя

timeless-mbp:q timeless$ echo '[ui]' > .hg/hgrc
timeless-mbp:q timeless$ echo 'username = timeless' >> .hg/hgrc

Сначала создайте, добавьте и зафиксируйте файл a

timeless-mbp:q timeless$ echo a > a
timeless-mbp:q timeless$ hg commit -Am a
adding a

Начать с новой ревизии нуля (ноль)

timeless-mbp:q timeless$ hg up -r null
0 files updated, 0 files merged, 1 files removed, 0 files unresolved

Создать, добавить и зафиксировать файл b

timeless-mbp:q timeless$ echo b > b
timeless-mbp:q timeless$ hg commit -Am b
adding b
created new head

Вернитесь к нашему первому файлу, это просто для создания чередованной истории версий

timeless-mbp:q timeless$ hg up -r 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved

Переименуйте a в файл, потому что мы хотим объединить его с b под именем "file"

timeless-mbp:q timeless$ hg mv a file
timeless-mbp:q timeless$ hg commit -m 'rename a to file'

Вернитесь к нашему второму файлу, это просто для создания чередованной истории версий

timeless-mbp:q timeless$ hg up -r 1
1 files updated, 0 files merged, 1 files removed, 0 files unresolved

Переименуйте b в файл, потому что мы хотим объединить его с именем "file"

timeless-mbp:q timeless$ hg mv b file
timeless-mbp:q timeless$ hg commit -m 'rename b to file'

Я форсирую слияние с помощью внутреннего, потому что я не хочу, чтобы всплывал инструмент слияния, есть другие инструменты слияния, которые вы могли бы использовать (например, в OS X с современными версиями Mercurial, он имеет тенденцию вызывать FileMerge. приложение, но это трудно показать в журнале).

timeless-mbp:q timeless$ hg --config ui.merge=internal:local merge 2
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)

Заменить содержимое на то, что я хочу

timeless-mbp:q timeless$ hg cat -r 2 file > file
timeless-mbp:q timeless$ hg cat -r 3 file >> file

Убедитесь, что в нем есть содержимое, которое я хочу

timeless-mbp:q timeless$ cat file
a
b

Зафиксировать «объединенный» файл

timeless-mbp:q timeless$ hg commit -m merging

Просмотр истории хранилища

timeless-mbp:q timeless$ hg log
changeset:   4:d9d3d23ec1cc
tag:         tip
parent:      3:01c6a61cbe04
parent:      2:3de70df713a7
user:        timeless
date:        Wed Jun 02 16:10:08 2010 +0300
summary:     merging

changeset:   3:01c6a61cbe04
parent:      1:e6b8058965b4
user:        timeless
date:        Wed Jun 02 16:09:43 2010 +0300
summary:     rename b to file

changeset:   2:3de70df713a7
parent:      0:635f50240100
user:        timeless
date:        Wed Jun 02 16:09:30 2010 +0300
summary:     rename a to file

changeset:   1:e6b8058965b4
parent:      -1:000000000000
user:        timeless
date:        Wed Jun 02 16:09:17 2010 +0300
summary:     b

changeset:   0:635f50240100
user:        timeless
date:        Wed Jun 02 16:09:01 2010 +0300
summary:     a

Проверка аннотированных выходных данных

timeless-mbp:q timeless$ hg ann -f -c file
635f50240100 a: a
e6b8058965b4 b: b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...