В Mercurial, почему мы не можем отменить коммит, когда есть другие измененные файлы? - PullRequest
3 голосов
/ 30 июня 2010

Вчера я зафиксировал файл, а затем хотел hg backout, но Mercurial говорит, что не может отказаться, потому что у меня есть другие измененные файлы в проекте…

Это немного странно ... это не атомарный уровень в каждом файле? Зафиксировать 1 файл и затем вернуть 1 файл?

Во-вторых, я могу сохранить копию этих измененных файлов A, B, C, в файлы tmp, hg восстановить их, а затем вернуться назад, а затем скопировать эти файлы tmp обратно в A, B, C и что так же, как просто hg backout, что последний коммит, но просто больше работы?

Ответы [ 2 ]

3 голосов
/ 30 июня 2010

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

Лично яникогда не сталкивался с этой проблемой.У меня никогда не было измененных файлов - я либо фиксирую их, либо храню их в патче MQ.Если вы не хотите использовать MQ, то для решения вашего дела достаточно простого

hg diff > tmp
hg revert --all
# working directory is now clean, do your merge/backout/...
hg import --no-commit tmp

.Это, конечно, было добавлено в более простые команды хорошими людьми, которые пишут расширения: см. Пример чердак .

2 голосов
/ 30 июня 2010

Неа.Mercurial - это не инструмент пересмотра файлов, это пересмотр изменений.Набор изменений включает в себя все файлы, затронутые конкретным изменением, а не отдельные файлы.

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

...