Эффективный способ сделать новый патч из некоторых текущих изменений

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

Таким образом, состояние рабочего каталога: применены исправления A, B, C, плюс изменения, которые должны быть внесены в исправление C, и изменения, которые должны быть внесены в новый исправление D.

Мой текущий рабочий процесс для этого выглядит следующим образом:

hg qnew D.patch files-for-patch-D..
hg qnew temp.patch # changes for patch C
hg qpop
hg qpop
# Now I'm on patch C
hg qfold temp.patch # Integrate changes into patch C
# Here I could have patch errors.. 
hg qpush

Я знаю, что я мог бы сделать это и так

hg qrefresh files-for-patch-C..
hg qnew -m "..." new-feature.patch 

Недостатком этого подхода является то, что количество файлов для патча C обычно велико, и неудобно помещать их все в командную строку. Количество файлов для патча D обычно невелико по сравнению с ним.

Есть ли лучший способ сделать это, чем то, что я описал выше?


person daniel kullmann    schedule 11.01.2012    source источник


Ответы (1)


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

$ hg qrefresh -X files-for-patch-D
$ hg qnew D.patch

То есть: исключите несколько файлов, которые вы изменили для исправления D, вместо того, чтобы пытаться включить все нужные файлы для исправления C.

Вы также можете принудительно установить патч D (с hg qpop -f) вместо того, чтобы сохранять свои изменения во временном патче. Это работает только в том случае, если файлы, затронутые патчем D, не пересекаются с изменениями в рабочей копии, т.е. когда вы не использовали qrecord из расширение записи для создания исправления D.

person Martin Geisler    schedule 11.01.2012
comment
принудительно поп: вы имеете в виду hg qpop -f? - person daniel kullmann; 11.01.2012