Як отримати конкретну версію файлу в Mercurial?


114

Я новачок у Mercurial. Просто не вдається знайти правильну команду. Спробували оновлення / оформлення замовлення без удачі. Я використовую локальне сховище. Дякую


@Omnifarious: я створив стабільну версію файлу. Потім продовжувала працювати над файлом, але незабаром зрозуміла, що мені потрібна остання "добра" версія. Це можна зробити, оновивши в svn, але коли я намагаюся оновити hg, він говорить "0 файлів ..."
Codism

Відповіді:


153

Я думаю, що ви хочете hg revert -r<rev> <file>(це змінить цей файл таким, яким він був у даній редакції).


Так, саме цього він хоче. :-)
всезначний

9
або просто hg відновити <ім'я файлу>, якщо ви хочете відмовитись від своїх поточних змін та отримати останнє, що було
скоєно

@BlackTigerX Без ревізії немодифікований файл не буде повернений ні до чого, навіть якщо це не остання скоєна версія. Я іноді використовую це для "вишневого вибору" файлів між редакціями, тому таке важливо.
користувач2864740

83

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


4
гнучко, саме те, що я побажав.
йота

Дивовижно, завжди приємно чути щось подібне.
Bra4 Ry4an Brase

24

hg revertдійсно вирішує цю проблему. Але я вважаю, що вас бентежить більш широке коло речей, ніж просто відповідь на ваше запитання і ви хочете спробувати відповісти більш повно.

hg updateце ціла команда репозиторію і не працюватиме на окремих файлах. На відміну від підриву svn updateтаким чином. Якщо це зробити, hg --help updateви можете бачити, що це так, оскільки команда не бере аргумент файлу. З його допомогою можна перемістити весь сховище до певного знімка, але не можна використовувати це лише для одного файлу.

Якщо ви введете, hg --helpви побачите список команд. Це досить великий і дещо жахливий список, але якщо ви прочитаєте його, ви знайдете цей рядок:

revert       restore individual files or directories to an earlier state

Тепер, якщо ви просто хочете останнього стану для порівняння, є ще одна команда, яка може вас зацікавити, і це hg cat. Це дозволить вам роздрукувати вміст файлу на будь-якій конкретній версії. Потім ви можете перенаправити його вихід у якийсь інший файл. Тоді ви можете мати попередню відому хорошу версію свого файлу та стару версію для порівняння.

Причина, по якій Меркуріал має окрему updateкоманду, полягає в тому, що в Меркуріалі можна зробити щось, що неможливо в Subversion. Ви можете updateв більш ранній версії, внести зміни, а потім здійснити зобов’язання. Це створить гілку. updateКоманда має ефект також зміни батьківського перегляду поточного робочого каталогу, а також зміни вмісту всіх файлів в цьому каталозі для версій цього Батьківська редакція ст.

Це означає, що revertзмінює вміст файлу (або навіть усього сховища, якщо ви даєте команді правильні аргументи), але залишає батьківську версію поточної робочої копії такою ж.

Ви можете дізнатися батьківську версію (або редакцію у разі злиття) поточної робочої копії, скориставшись hg parentsкомандою.

У Subversion ревізії є суворо лінійною прогресією. Меркуріал створює гілки на краплі капелюха, і їх майже так само легко злити. Ревізії утворюють DAG, а не строго лінійну прогресію.


13

Щоб витягти конкретну версію певного файлу, це можна зробити в Windows:

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

Тут 9 - номер ревізії.

Або ще краще:

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

1

Прийшов сюди, намагаючись отримати попередню версію, тому ось точна команда:

hg revert -r .~1 <file>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.