Эффективный способ сделать новый патч из некоторых текущих изменений
-
27-10-2019 - |
Вопрос
Я очень много использую очереди из ртути, и я очень доволен ими, но есть один рабочий процесс, который я нахожу слишком сложным. Иногда случается, что я работаю над патчем, а потом я понимаю, что работал над чем -то, что должно быть в отдельном патче (например, когда я исправил ошибку, которую я нашел во время работы над функцией, или добавил другую функцию для что я действительно хочу иметь в отдельном патче).
Таким образом, состояние для рабочего каталога: Платы 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, как правило, мало по сравнению.
Есть ли лучший способ достичь этого, чем то, что я изложил выше?
Решение
Я думаю, что вы освещали наиболее типичные подходы к этой проблеме - я также время от времени сталкиваюсь с ней. Одно альтернативное решение, о котором я знаю, это сделать
$ hg qrefresh -X files-for-patch-D
$ hg qnew D.patch
То есть: исключать несколько файлов, которые вы изменили для патча D, вместо того, чтобы пытаться включают Все правильные файлы для патча C.
Вы также можете насильственно поп -патч D (с hg qpop -f
) вместо того, чтобы спрятать свои изменения во временный патч. Это работает только в том случае, если файлы, затронутые патчем D, не пересекаются с изменениями в рабочей копии, т.е., когда вы не использовали qrecord
от Расширение записи создать патч D.