Как применить патч свернутых ревизий к транку в Mercurial?

Я ищу передовые методы, чтобы делать следующее:

Когда мне нужно реализовать функцию или исправить ошибку, я создаю новый репозиторий Mercurial из основного (ствола). Затем, в течение нескольких дней или недель, я реализую задачу во вновь созданном репозитории, делаю коммиты и периодически сливаюсь со стволом. После того, как код в новом репозитории пройдет все проверки кода, я должен предоставить репозиторий со всеми изменениями, свернутыми в одну ревизию.

Мой обычный способ сделать это (должно быть включено расширение rdiff):

hg clone ~/repos/trunk ~/repos/new-collapsed
cd ~/repos/new-collapsed
hg diff ~/repos/new > new.diff
patch -p1 < new.diff
hg commit

Это работает почти хорошо, за исключением случаев, когда в изменениях из ~ / repos / new присутствуют двоичные файлы. Другой способ:

hg clone ~/repos/trunk ~/repos/new-collapsed
cd ~/repos/new-collapsed
hg pull ~/repos/new
hg update
hg rollback
then resolve possible conflicts and manually commit the changes

Оба способа кажутся мне несколько уродливыми и неродными, поэтому я ищу, как можно упростить эту операцию. Я играл с расширением rebase, но похоже, что его команда hg rebase --collapse не работает с рабочим процессом, описанным выше .

Любые идеи приветствуются.


person Serge Tarkovski    schedule 15.09.2010    source источник


Ответы (3)


Похоже, хороший случай для непостоянных очередей.

person Paul Nathan    schedule 15.09.2010

Я делаю нечто подобное с расширением histedit.

Мой рабочий процесс выглядит примерно так:

  • клонировать центральное репо
  • фиксировать инкрементальные изменения в локальном репо
  • клонировать мое локальное репо, чтобы сделать свернутое репо
  • hg histedit и выберите / отмените / сверните исправления по мере необходимости
  • hg push свернутое репо в центральное репо
  • перетащить центральное репо на локальное или обновить локальное с нуля

Я гарантирую, что мое локальное репо никогда не будет перенесено в центральное репо, добавив неверный путь default-push к .hg/hgrc файлу в корневом каталоге локального репо.

person ataylor    schedule 15.09.2010
comment
Хммм, какое-то время назад я посмотрел на расширение histedit ... обычно у меня есть много ревизий, которые нужно свернуть (моя собственная запись была 600+ коммитов), поэтому во многих случаях ручное управление ревизиями не подходит. - person Serge Tarkovski; 16.09.2010

Решено: просто добавьте

[diff]
git = True

в ваш файл hgrc, а затем используйте мое первое решение с расширением rdiff, заменив patch на hg import:

hg clone ~/repos/trunk ~/repos/new-collapsed
cd ~/repos/new-collapsed
hg diff ~/repos/new > new.diff
hg import new.diff
hg commit
person Serge Tarkovski    schedule 02.07.2011