Управление кодом в Mercurial: как восстановить отдельные файлы, «пометить» его и сохранить - PullRequest
3 голосов
/ 02 декабря 2011

Обновление: в итоге мы использовали процесс, очень похожий на эту схему (спасибо neuro за ссылку).Мы перенесли репозиторий в состояние, в котором значение по умолчанию стабильно (и имеет тот же код, что и в нашей производственной среде), у нас есть ветка dev, ветки функций для новых вещей и использование веток релизов для релизов.Кажется, все работает отлично.

Backstory

Наша команда недавно перешла от использования SVN (с помощью Windows-клиента ToroiseSVN) к Mercurial (с помощью Windows-клиента TortoiseHg) для контроля версий.Мы успешно экспортировали наш репозиторий SVN и импортировали его в репозиторий Mercurial.

Теперь у нас есть репозиторий Mercurial, где мы можем видеть всю историю ревизий (наборов изменений в Mercurial).

Как мыделал это в старые времена

В старые времена жизнь была проще;наш процесс разработки не был действительно многопоточным, как сейчас. ствол использовался для хранения всего кода - даже изменений, которые все еще находились в полете (до тех пор, пока он не сломал ствол ).Когда дело дошло до управления выпусками с SVN, мы извлекали ствол (который содержит весь код), * ​​1021 * возвращали отдельные изменения, которые мы не хотели, как часть выпуска, и создавали тег за это.

Набрать нужный код с помощью SVN было легко.Исправление ошибок предыдущих выпусков и обеспечение того, чтобы это было частью trunk , было также просто.

Что мы делаем сейчас

В Mercurial нам нужно иметь возможность получитьснимок «ствола» ( по умолчанию в Mercurial) с отмененными отдельными изменениями.Мы можем сделать это, используя hg revert .

Чтобы сделать снимок этого, мы создали «именованную ветвь» - назовем ее пока Build-4.0.1 .

Там, где возникает проблема

Разработка продолжается по умолчанию как обычно, когда обнаружена ошибка в Build-4.0.1 .Давайте предположим, что ошибка находится в одном из возвращенных файлов.Мы меняем код из ветви для Build-4.0.1 , создаем новую "именованную ветку" ( Build-4.0.2 ) и хотим объединить он возвращается в по умолчанию , не нажимая перевернутый код поверх нового кода.Как мы можем это сделать?

В качестве альтернативы, есть ли лучший рабочий процесс для управления выпусками и нашим кодом в Mercurial?Мне очень нравится, как выглядит этот замечательный ответ SO по управлению ветвями релиза , хотя я не уверен, как мы можем перейти к нему из того состояния, в котором мы находимся сейчас (с вещами в полете в по умолчанию)).

Примечание. Я смотрел на расширение Transplant , но еще не использовал его - может ли оно быть частью решения этой задачи?

Ответы [ 2 ]

4 голосов
/ 02 декабря 2011

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

Обычный способ вернуть рабочую копию в какой-то момент назад - это обновить:

hg update -r 1234

оттуда вы можете пометить, изменить, зафиксировать и т. Д.

Для слияния вам нужно только слить ветку релиза с веткой по умолчанию. Он будет работать как брелок, если только это не относится к разным / старым версиям.

Transplant работает отлично, но сделайте что-то немного отличное от слияния: он принимает ваш набор изменений как «diff» и применяет его как новую модификацию.

Чтобы управлять своими выпусками, вы можете посмотреть этот другой ответ (мной):

Как использовать Mercurial для управления релизами?

Мы используем ветку clone / main, которая содержит наиболее стабильную версию, которая выпускается в некоторых точках. На этой ветви clone: ​​мы можем исправлять критические ошибки (исправление). Параллельно мы используем dev clone / branch для разработки. Исправления объединяются, как только завершены, из стабильного в dev. Когда текущая разработка завершена, мы объединяем dev в стабильный / default.

Эта схема довольно хороша для понимания вещей:)

Удачи!

3 голосов
/ 02 декабря 2011

Проходя через все изменения и отбирая те, которые вам не нужны, мягко говоря, не является обычным способом создания релиза.Раздел Общие шаблоны ветвления в книге SVN предлагает несколько более популярных рабочих процессов:

  • ветви выпуска : создание ветви выпуска из нестабильной магистрали, исправление ошибок вСтабилизируйте его, исправляя ошибки между ними, пока ветка находится в режиме обслуживания.
  • ветви функций : поддержание стабильности магистрали и готовность к выпуску путем объединения только тех ветвей функций, которые вы хотите

Вторая, вероятно, наиболее подходитздесь, потому что это дает вам возможность вносить экспериментальные или рискованные изменения, пока вы не почувствуете в них уверенность - это те изменения, которые вы бы отменили до выпуска в своем старом рабочем процессе.более чем хорошо для ртути.Если вы выберете первый подход, обратите внимание, что у mercurial (начиная с 2.0) теперь есть команда graft , вам больше не нужно расширение трансплантата.

...