Подтвердить что ты не робот

Как получить определенную версию файла в Mercurial?

Я новичок в Mercurial. Просто не могу найти нужную команду. Пробовал обновление/проверку без везения. Я использую локальный репозиторий. Благодаря

4b9b3361

Ответ 1

Я думаю, что вы хотите hg revert -r<rev> <file> (это изменит этот файл так, как это было при данной ревизии).

Ответ 2

Как сказал djc, revert изменяет файл на месте, чтобы соответствовать предыдущей ревизии. Если вы хотите, чтобы он не был на месте, вы можете использовать hg cat -r revisionid filename (подставляя ревизию и имя файла, конечно), который выведет файл в stdout, подходящий для перенаправления любого места, которое вы хотите.

Ответ 3

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, а не строго линейную прогрессию.

Ответ 4

Чтобы извлечь конкретную ревизию определенного файла, вы можете сделать это в Windows:

hg cat "<FileToBeExtractedPath>" -r 9 > "<ExtractionPath>"

Здесь 9 - номер ревизии.

Или даже лучше:

hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>"