Как я могу создать ветку для ревизии без чаевых в Mercurial? - PullRequest
6 голосов
/ 16 марта 2011

В моем репо у меня есть ревизии от 1 до 10. Я выдвинул до 5 (поэтому следующая hg push опубликует ревизии 6-10).

Но я должен прервать свою работусейчас и результат не на 100% завершен.Поэтому я хотел бы переместить редакции 6-10 в новую «экспериментальную» ветку, чтобы позволить кому-то еще завершить работу , не нарушая источников для всех.

Как добавитьветвь без ревизии (в моем случае: начиная с ревизии 6)?Или я должен использовать совершенно другой подход?

Ответы [ 2 ]

7 голосов
/ 16 марта 2011

Вы не можете применить имя ветви после факта, не изменив свою историю.

Самый простой подход - попросить других пользователей использовать ревизию 5 в качестве родительской для любых изменений, которые они создают.Например, другие пользователи будут:

  1. hg clone <your repo> или даже hg clone --rev 5
  2. hg update -r 5
  3. работа, работа, работа
  4. hg commit

Когда они фиксируют изменения, это создаст вторую голову на ветке default, но это не должно создавать никаких проблем.Вам просто нужно объединить две головки вместе, как только ваши экспериментальные изменения будут завершены.

При этом перемещение ваших наборов изменений в ветвь может быть выполнено с использованием Mercurial Queues (MQ).В следующей последовательности показано, как это сделать:

  1. hg qinit (создать новую очередь исправлений)
  2. hg qimport --rev 6:10 (импортировать r6-10 в новую очередь исправлений)
  3. hg qpop -a (удалить все исправления из вашей рабочей копии)
  4. hg branch <branch name> (создать новую экспериментальную ветку)
  5. hg qpush -a (применить все исправления к вашей ветви)
  6. hg qfinish -a (преобразовать все патчи в постоянные наборы изменений)
2 голосов
/ 16 марта 2011

Тим уже имеет хорошие предложения.Кроме того, вы можете перенести свои экспериментальные изменения в отдельный экспериментальный клон на вашем центральном сервере (я полагаю, вы используете его).Этот клон также может быть использован другими разработчиками, чтобы продвинуть свою еще не законченную работу, чтобы позволить другим просмотреть или продолжить ее.Также ясно, что код этого клона не готов к использованию.После завершения какой-либо задачи соответствующие наборы изменений можно отправить в репозиторий stable .

Фактически именованные ветви - это хорошая идея для вашего случая, но тот факт, что их имена записаны в историив основном это больше проблема, чем функция.ИМХО Имена филиалов Git более практичны.Тем не менее, в некоторой степени вы также можете обрабатывать ваше дело с помощью закладок, которые можно использовать с версии Mercurial 1.7 (здесь не уверен).То есть вы добавляете в ревизию 5 что-то вроде stable (или что бы вы ни договорились в вашей команде), а ревизия 10 добавляется в закладки как что-то вроде Aarons-not-done-work Затем другие разработчики просто вытянут stable , за исключением вашего коллеги, который должен продолжить вашу работу, который будет тянуть другую закладку.Однако лично я еще не использовал такой рабочий процесс, поэтому не могу сказать, насколько он эффективен на практике.

...