Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
hgbook.pdf
Скачиваний:
50
Добавлен:
17.03.2015
Размер:
3.15 Mб
Скачать

Управление изменениями с Mercurial Queues

adding file changes

added 1 changesets with 12 changes to 12 files (run 'hg update' to get a working copy)

$ hg qpush -a

(working directory not at a head) applying build-fix.patch

now at: build-fix.patch

12.15.2. Объединение целых патчей

MQ обеспечивает команду qfold, которая позволяет объединить целые патчи. Она «складывает» патчи имена которых вы указали, в порядке указанном вами, наверх применяемого патча, и объединяет их описания в конечное описание. Патчи должны быть неприменёнными, перед тем как вы их сложите.

Порядок, в котором вы складываете патчи важен. Если верхним применяется патч foo, и вы складываете qfold bar и quux в него, вы в конечном итоге с помощью патча, получите тот же эффект, как при применении сначала foo, потом bar, а затем quux.

12.15.3. Слияние части одного патча с другим

Слияние частей патча в другой сложнее, чем слияние целых патчей.

Если вы хотите переместить изменения некоторых файлов, вы можете использовать опции -i и -x команды filterdiff для выбора изменений из одного патча, присоедините ее выход к концу патча, в который хотите их влить. Вам, как правило, не требуется вносить изменения в патч измененный объединением. Вместо этого, MQ сообщит что некоторые блоки отвергнуты, когда вы попытаетесь сделать qpush (те блоки которые вы переместили в другой патч), и вы можете просто сделать qrefresh для удаления из патча дубликатов блоков.

Если у вас есть патч, который имеет несколько кусков изменяющих файл, и вы только хотите перенести часть из них, работа становится более грязным делом, но все равно можно частично автоматизировать его. Использование lsdiff -nvv печатает различные метаданные о патче.

$ lsdiff -nvv remove-redundant-null-checks.patch bash: lsdiff: command not found

Это команда выводит три различных номера:

(В первой колонке) номер файла для идентификации каждого файла модифицируемого в патче;

(На следующей строке с отступом) номер строки в рамках изменяемого файла, где начинается блок, и

(на той же линии) номер блока идентифицирующего блок.

Вам придется использовать некоторый визуальный осмотр, и чтение патча, чтобы идентифицировать файл и блок с номерами которые вы хотите, но вы можете передать их в filterdiff используя опции --files и --hunks, чтобы выбрать именно тот файл и блок который вы хотите извлечь.

После этого вы можете вставить этот блок в конец патч назначения и продолжать так как описано в разделе Раздел 12.15.2, «Объединение целых патчей».

12.16. Различия между quilt и MQ

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

Вы уже заметили, что для большинства команд quilt есть аналоги в MQ, только начинаются они с «q». Исключения в quilt команды add и remove, аналоги для них есть в обычном Mercurial команды hg add и hg remove. Нет эквивалента в MQ команды quilt edit.

155

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]