мерзавец эквивалентно HG MQ? - PullRequest
50 голосов
/ 04 июня 2009

Я только начал использовать Git вместе с Mercurial, чтобы ознакомиться с Git.

Я широко использую расширение mq в Mercurial для управления локальными исправлениями и ищу эквивалент Git.

Должен ли я просто использовать ветку Git? Или есть более эффективные способы управления локальными исправлениями, которые позволяют легко применять и удалять исправления?

Спасибо

Ответы [ 4 ]

31 голосов
/ 05 июня 2009

Отказ от ответственности: я не пользователь hg, поэтому я читал о hg, но у меня нет особого опыта его использования.

git предоставляет несколько очень мощных и гибких инструментов для управления ветвями в стиле 'очереди исправлений', поэтому для многих базовых (и даже некоторых довольно сложных) вариантов использования нативный git является достаточно мощным.

Как правило, большинство проектов поддерживают центральную стабильную главную ветвь, которая получает только новые коммиты и никогда не перематывается, поэтому фиксации в основной ветке фиксируются.

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

Типичные действия по управлению исправлениями включают в себя:

перестановка очереди исправлений в последнюю стабильную ветвь - используйте git rebase,

дублирование очереди исправлений на старую ветку обслуживания - используйте git branch и git rebase,

изменение порядка исправлений в очереди - используйте git rebase --interactive (он же git rebase -i), используя текстовый редактор для изменения порядка очереди.

патчи для сдавливания - используйте git rebase -i с директивой для сквоша

Изменение патчей или сообщений о фиксации патча - используйте git rebase -i (определить тему?) С директивой редактирования.

Любое действие, которое каким-либо образом изменяет патч (то есть его содержимое, описание или происхождение), создает новый коммит с новым идентификатором фиксации для этого патча. Тот факт, что старые коммиты могут регулярно выбрасываться и заменяться до их перехода в стабильную главную ветвь, является единственным, что делает их «очередью исправлений», а не ветвью, но это соглашение проекта, а не физическое различие. в данных, которые составляют коммиты. Для мерзавцев это идентичные объекты.

Чтобы преобразовать патч в «реальный» коммит, просто переместите патч в начало очереди и объедините его с главной веткой. После перемещения патча в начало очереди, он точно такой же, как и обычный коммит, основанный на главной ветви, поэтому его слияние просто ускоряет пересылку указателя главной ветки для указания на фиксацию патча.

Публикация этого коммита как «стабильного» мастер-патча - это акт, который гласит: это коммит, который не изменится и является частью неизменной истории проекта.

31 голосов
/ 05 июня 2009

Ознакомьтесь с разделом «Слои интерфейса управления исправлениями» на странице Интерфейсы, интерфейсы и инструменты на Git Wiki. Здесь перечислены два интерфейса управления исправлениями, примерно эквивалентные Mercurials 'mq' extension :

  • StGIT (Stacked Git), более старый из двух, написанный на Python, использует два снимка для представления патча
  • Вина (ранее «gq»), написанная в виде серии bash-скриптов, файл серии и патчи (по одному на файл) сохраняются в виде простого текстового файла.
  • pg (Patchy Git) устарел и больше не поддерживается.

Но если вам не нужно более продвинутое использование, вместо этого вы можете использовать " git rebase --interactive " для изменения порядка, сквоша и разделения патчей. А чтобы управлять вашей веткой в ​​сравнении с текущей версией апстрима, обычно достаточно «git rebase».

9 голосов
/ 05 июня 2009

Просто используйте ветку и регулярно перебрасывайте ее на ветку upstream. Это проще в управлении и безопаснее, чем использование mq (к которому я потерял данные в прошлом).

7 голосов
/ 05 июня 2009

Git на самом деле не предоставляет эту функцию сама. В зависимости от вашего использования, вы можете обойтись с помощью «git stash» и / или веток, но это будет довольно просто. Если у людей есть более продвинутые потребности в управлении патчами с помощью git, они, похоже, обращаются к Quilt или StGit: см. http://git.or.cz/gitwiki/PatchManagement

...