Является ли `qrefresh` вредным? - PullRequest
5 голосов
/ 09 ноября 2010

Команда qrefresh в расширении MQ не имеет смысла для меня.Я объясню свое предположение:

  1. Если вы не знаете, к какой ревизии следует применить определенный патч, он имеет очень небольшое значение.Вы просто не можете теоретически знать, что означает отказ.И даже если в определенной ревизии нет отклонений, вы не уверены, что вся ревизия скомпилируется.
  2. Как только вы qrefresh определите патч в своей очереди патчей, вы фактически теряете родителяследующий патч в очереди.Так что без вашего вмешательства этот следующий патч будет / может оказаться бесполезным.
  3. Чтобы исправить следующий патч, вам лучше объединить его, а не редактировать файлы .rej вручную.Не только из-за лучших инструментов, если у вас есть оригинальный не qrefresh 'ed патч, у вас есть больше информации, qrefresh заставил вас потерять информацию, которая вам действительно нужна, чтобы внести изменения, которые вы сделали в патчезначимые.

Поэтому я не понимаю, почему кто-то захочет использовать эту команду.

Лучшая альтернатива - применить все патчи, затем hg update кродительский патч, который вы хотите изменить, затем hg revert рабочий каталог патча, который вы хотите изменить.Измените этот патч, зафиксируйте его в новой ревизии, а затем перебазируйте все остальные патчи в этой новой ревизии.

Я просто не понимаю, когда qrefresh имеет значение, когда вы не редактируете ни одного патчатолько.Кажется, что подход git (применить исправление к локальной ветке) имеет гораздо больший смысл, чем очередь исправлений.

Я прав, и я бы лучше использовал rebase?Я что-то пропустил?

мигрировал с kiln.se.com из-за отсутствия ответа и низкой скорости просмотра

Ответы [ 2 ]

3 голосов
/ 09 ноября 2010

РЕДАКТИРОВАТЬ : после написания ответа ниже я наткнулся на главу о патчах из Mercurial The Definition Guide .Это говорит более или менее то же самое, но гораздо более подробно, чем мой ответ.Он также предлагает способ (немного сложный на мой вкус, но в любом случае) использовать трехстороннее слияние с патчами, как искал OP.

Возможно, вы видите mq только как инструмент импорта патчей?Это не мое основное использование, и для меня qrefresh очень полезен.Типичный пример использования для меня - это когда я работаю поверх опубликованного репозитория.

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

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

Когда вы работаете таким образом, слияния обычно очень просты, и я почти не получаю отклоненийqpop ing и qpush ing вокруг.

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

Можно сделать то же самое с rebase, но тогда вам понадобится такая функция, как git interactive rebase.

Весь смысл работы с патчами заключается в том, что патчи еще не зафиксированы, поэтому их легко изменить, и для этого вам потребуется qrefresh.Ну, я мог бы достичь того же результата, создавая новые патчи и qfold используя их, но на самом деле не было бы смысла делать это, просто две команды вместо одной.

Теперь, когда патчи являются внешними компонентами, какОсновным помощником в моем проекте являются вклады, предоставленные участниками, и они никогда не попадают непосредственно в хранилище.Сначала они попадают в мой основной стек патчей.Если они вносят изменения в те же части программы, над которой я работаю, они могут вызвать отклонения (и если так, то я вообще не вставляю их вообще, это может привести к хаосу).Если они применяются к какой-либо другой части программы, которая в настоящее время не изменяется, они в основном объединяются без каких-либо проблем и могут быть импортированы в любой точке стека исправлений, без необходимости вставлять их при определенной ревизии.Но я всегда читаю изменения, и довольно часто я немного изменяю внесенный код.Затем я снова использую qrefresh, чтобы обновить внешний патч так, как я полагаю.

0 голосов
/ 09 ноября 2010

Вы должны выбрать ответ Крисса, он / она хорошо объясняет все это, но вот статья о программном обеспечении, которое вдохновило функцию управления исправлениями как в Mercurial, так и в Git, quilt:

http://www.suse.de/~agruen/quilt.pdf

...