вытащить файлы из определенной ревизии - Mercurial - PullRequest
8 голосов
/ 17 октября 2010

У меня есть 3 репозитория, каждый из которых создан с одной и той же кодовой базой, но достаточно разными, чтобы гарантировать наличие разных репозиториев.Мой рабочий процесс, о котором я мечтаю, состоял бы в том, чтобы выполнить работу в репозитории разработки и затем перенести эти изменения в другие репозитории.Я знаю, что могу сделать это с чем-то вроде:

hg pull -r X -f repo

, но это даст мне все наборы изменений до X. Можно ли просто извлечь все наборы изменений из конкретной ревизии или даже из диапазона ревизий

Ответы [ 3 ]

8 голосов
/ 18 октября 2010

Нет хорошего способа выбора версий вишни в Mercurial (так называется ваш предложенный рабочий процесс). Есть несколько не очень хороших способов сделать это: экспорт + импорт (или удобная оболочка для экспорта + импорта, называемая трансплантатом), но недостаток в том, что у вас есть один и тот же набор изменений с разными хэшами в нескольких репозиториях, без толку способ представить это, если / когда вы пытаетесь переместить изменения снова.

Лучше изменить ваш рабочий процесс так, чтобы, когда вы захотите переместиться через изменение, у вас все в порядке с перемещением по всем его предкам, и вы делаете это, сознательно выбирая предков ревизии.

Например, если вы исправляете ошибку, которая находится в репозитории разработки, и все три «других» репозитория не просто изменяют родительскую ревизию изменения tip репозитория разработки. Сначала выполните hg update -r THE_REVISION_WHERE_THE_BUG_WAS_ADDED, затем исправьте ошибку, а затем подтвердите. Вы увидите сообщение с надписью new head created, что ожидается.

Теперь вы получили это исправление как наборы изменений, единственным родителем которых является набор изменений, в котором была введена ошибка - которая должна существовать в 3 других репозиториях, иначе они не будут иметь ошибки. Так что теперь вы можете pull этот новый набор изменений в «3» других репозиториях, не принося с собой все остальное в разработку. И затем вы делаете быстрый hg merge в каждом из этих четырех репозиториев, смешивая исправление ошибки с их развертываемым tip.

Получить представление о том, как структурировать репозитории с общей функциональностью, но с настройками в каждом, может быть немного сложно, но если вы правильно структурируете вещи, вы можете выполнить все ваши миграции внутри репо, используя push, pull и merge, и никогда не придется исправлять ошибку дважды, иметь один и тот же код в разных наборах изменений или заново выполнять настройку репозитория.

Как примечание, команда bisect отлично справляется с ответом на вопрос «где была введена эта ошибка», прежде чем кто-то начнет ее исправлять.

7 голосов
/ 30 августа 2012

Обновленный ответ: Начиная с Mercurial 2, вы можете использовать команду ' graft ', которая прекрасно работает.Он использует некоторые внутренние возможности слияния, чтобы убедиться, что вы можете обрабатывать любые конфликты вручную.Если нет никаких конфликтов, которые Mercurial не может разрешить сам, новая ревизия автоматически выбирается и фиксируется поверх вашей текущей ревизии.

7 голосов
/ 17 октября 2010

Если вы хотите получить содержимое определенных наборов изменений и применить их к произвольной проверке (примечание: результирующие наборы изменений будут различными наборами изменений , даже если они составляют те же изменения ), взгляните на расширение transplant .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...