Mercurial Team репозиторий / сбор и выбор - PullRequest
0 голосов
/ 02 марта 2011

У меня небольшая команда, и я хотел бы сделать следующее:

У меня есть свой ствол, я просто назову его TRUNK

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

Каждый пользователь клонирует TRUNK в свои локальные репозитории, вносит изменения и помещает их в каталог TRUNK / projects (projects не является клономTRUNK, просто обычный каталог)

Теперь наступает день, когда я хочу создать новую сборку под названием RELEASE, и я хочу объединить некоторые исправления ошибок (не все, только некоторые) в RELEASE.

Обратите внимание, я не привержен идее иметь TRUNK / projects / [список исправлений ошибок], но это то, что у меня сейчас есть, и я более чем открыт для любых / всех предложений.

Что такоенекоторые идеи?Есть что-то, что я могу сделать / должен сделать по-другому?Опять же, я открыт для любых / всех предложений, включая полное изменение вышеуказанной процедуры (за исключением использования Mercurial, поскольку именно это заставляет нас использовать)

Ответы [ 2 ]

0 голосов
/ 02 марта 2011

Есть два способа сделать это, и они расходятся не во время выпуска, а когда вы исправляете ошибку, в зависимости от того, какого родителя вы предоставляете наборы изменений исправления.«Хороший» способ использует только push, pull и merge.Менее хороший способ (это не совсем плохо, но он, безусловно, неоптимальный ) называется сбор вишни , и у него есть недостатки.Сложность в том, что если вы собираетесь перемещать исправления ошибок в RELEASE с помощью слияния, не перемещая все из TRUNK в RELEASE, вы должны решить, прежде чем вносить это изменение.

Вот действительно полный ответ на аналогичный вопрос, который объясняет, что происходит: Некоторая помощь по слиянию устаревшей ветки в Mercurial

Однако ключевая концепция заключается в том, что вы можете объединить набор измененийв любую ветку, которую вы хотите , но она приносит с собой все наборы изменений своего предка.Итак, вы хотите, чтобы ваша ошибка была исправлена, чтобы иметь минимальное происхождение Это означает исправление ошибки не в новом наборе изменений в TRUNK, который оказывается самой последней добавленной вами функцией, а вместо этого, во-первых, hg update в отношении набора изменений, который уже существует как в вашем TRUNK, так и в вашем RELEASE, и есть два большихкандидаты на это.Либо:

  • набор изменений, где RELEASE и TRUNK расходятся

, либо

  • набор изменений, где была введена ошибка

Я предпочитаю позже.Если ошибка была внесена в changeset 666, то каждый клон, ветвь и сборка, которые имеют changeset 666, захотят ваше исправление.Поэтому, исправляя это, просто сделайте:

  hg update 666
  .. fix the bug ..
  hg commit -m "fixed bug 55" # creats changeset 999 which a new head

Тогда вы можете сделать это:

hg update TRUNK
hg merge 999

, и вы будете знать, что вы тянете только одну ревизию.Позже, когда вы будете готовы к выпуску, вы можете сделать:

hg update RELEASE
hg merge 999

и вы снова получите только одну нужную вам ревизию.

Преимущество этого режима работы по сравнению с cherrypicking (использование экспорта / импорта или трансплантации) заключается в том, что ваше исправление существует только один раз в вашем репо.Если у вас есть 99 различных веток поставщиков для разных привередливых клиентов, и вы хотите посмотреть, есть ли у них исправление для ошибки 55, вы можете просто сделать:

hg log -r 'descendants(999) and heads(FUSSYCUSTOMERBRANCHNAME)'

и если нет результатов, то этот клиент неимеют 999 и, следовательно, не имеют исправления для ошибки 55 в наборе изменений 666. Когда вы повторяете ту же работу с несколькими наборами изменений (что является результатом экспорта / импорта и трансплантации), это сложнее проверить.

0 голосов
/ 02 марта 2011

Обычная практика - создавать ветки тем.

Каждый новый выпуск / тикет / улучшение фиксируется в отдельной ветке.

Каждый раз, когда сопровождающий хочет сделать новый выпуск, он может объединить все (или тольконекоторые) которые переходят в "default" или даже в новую ветвь, называемую, например, "release_1_x".

Чтобы быть более точным.Разработчик, работающий над кодом, может по-прежнему клонировать репозиторий, затем создавать локальную ветвь и, наконец, после одного или нескольких коммитов в эту ветвь вносить локальные изменения в один централизованный клон (из которого каждый другой разработчик в команде может снова извлечь / клонировать).

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