Я новичок в Mercurial. Просто не могу найти нужную команду. Пробовал обновить / оформить заказ безуспешно. Я использую локальный репозиторий. Спасибо
Я новичок в Mercurial. Просто не могу найти нужную команду. Пробовал обновить / оформить заказ безуспешно. Я использую локальный репозиторий. Спасибо
Ответы:
Я думаю, вы хотите hg revert -r<rev> <file>
(это изменит этот файл таким, каким он был в данной ревизии).
Как сказал djc, revert
изменяет файл на месте, чтобы он соответствовал предыдущей версии. Если вы хотите, чтобы его не было, вы можете использовать hg cat -r revisionid filename
(заменив, конечно, revisionid и filename), который выведет файл на стандартный вывод, подходящий для перенаправления в любое место, куда вы хотите.
hg revert
действительно решает эту проблему. Но я думаю, что вас смущает более широкий круг вещей, чем просто ответ на ваш вопрос, и вы хотите попытаться ответить более полно.
hg update
является командой всего репозитория и не будет работать с отдельными файлами. Это не похоже на подрывную деятельность svn update
. Если вы это сделаете, hg --help update
вы увидите, что это так, потому что команда не принимает аргумент файла. Его можно использовать для перемещения всего репозитория в конкретный моментальный снимок, но нельзя использовать для этого только в один файл.
Если вы введете, hg --help
вы увидите список команд. Это довольно большой и несколько устрашающий список, но если вы его прочитаете, вы найдете такую строку:
revert restore individual files or directories to an earlier state
Теперь, если вам просто нужно последнее состояние для сравнения, есть еще одна команда, которая может вас заинтересовать, и это hg cat
. Это позволит вам распечатать содержимое файла любой конкретной ревизии. Затем вы можете перенаправить его вывод в другой файл. Затем вы можете сравнить предыдущую, заведомо исправную версию файла и старую версию для параллельного сравнения.
Причина, по которой Mercurial имеет отдельную update
команду, заключается в том, что в Mercurial можно делать что-то, что невозможно в Subversion. Вы можете update
перейти к более ранней версии, внести изменения, а затем зафиксировать. Это создаст ветку. Команда update
также изменяет родительскую ревизию текущего рабочего каталога, а также изменяет содержимое всех файлов в этом каталоге на версии этой родительской ревизии.
Это означает, что revert
изменяется содержимое файла (или даже всего репозитория, если вы даете команде правильные аргументы), но оставляет родительскую версию текущей рабочей копии такой же.
Вы можете узнать родительскую ревизию (или ревизии в случае слияния) текущей рабочей копии с помощью hg parents
команды.
В Subversion ревизии представляют собой строго линейное развитие. Mercurial создает ветки в мгновение ока, и их почти так же легко объединить. Изменения образуют группу DAG, а не строго линейную последовательность.
Чтобы извлечь конкретную версию определенного файла, вы можете сделать это в Windows:
hg cat "<FileToBeExtractedPath>" -r 9 > "<ExtractionPath>"
Здесь 9 - номер версии.
Или даже лучше:
hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>"