В репозитории есть только одна рабочая копия, по определению :
Рабочий каталог - это каталог верхнего уровня в хранилище, в котором
простые версии файлов доступны для чтения, редактирования и сборки.
Если ваша файловая система не происходит от кота Шредингера, вы не можете иметь две версии одного и того же файла одновременно, поэтому у вас не может быть двух рабочих копий.
Тем не менее, теоретически возможно использовать нечто вроде эфемерного клона (per @ Ry4an), чтобы действовать в качестве рабочей копии слияния, разрешать конфликты там, фиксировать, а затем заставлять его исчезать. Вы получите красивый набор изменений слияния и вашу неповрежденную рабочую копию.
Я могу придумать несколько способов добиться этого:
- Подайте ходатайство команде hg, чтобы сделать это в ядре
- Напишите расширение для реализации эфемерного клона или каким-либо другим способом
- Полка с временной сменой
- Полка с MQ
Я настоятельно рекомендую # 4, как и для почти всех сценариев рабочих процессов. Мне потребовалось несколько хороших дней, чтобы проглотить MQ, но как только я это сделал, мне никогда не пришлось возвращаться.
В рабочем процессе MQ ваша рабочая копия всегда является текущим патчем. Таким образом, для ситуации слияния вы должны сделать:
hg qrefresh
hg qpop -a
hg update -r<merge first parent>
hg merge [-r<merge second parent>]
hg commit
hg update qparent
hg qgo <working copy patch>
Вам не нужно вставлять все патчи в # 2. Я всегда делаю это всякий раз, когда мне нужно иметь дело с реальными наборами изменений, чтобы не смешивать их с патчами.
Решение № 3 действительно то же самое, что и № 4, так как патч является временным набором изменений по определению (это действительно единственное, что вам нужно для понимания MQ). Это просто разные команды:
hg commit -A
hg update -r<merge first parent>
hg merge [-r<merge second parent>]
hg commit
hg update -r<working copy changeset parent>
hg revert -a -r<working copy changeset>
hg strip <working copy changeset>
Если вы хотите сохранить набор изменений рабочей копии и продолжить фиксацию, просто обновите его до # 5.
Судя по твоему вопросу, ты уже знаешь №4, но не любишь полки. Я думаю, что откладывание хорошо, потому что объединение - это принципиально иная задача, чем кодирование (изменение рабочей копии), а откладывание делает переключение контекста явным и безопасным.