Відмовитися від усіх і отримати чисту копію останньої версії?


159

Я переміщую процес збирання, щоб використовувати міркулярний і хочу повернути робочий каталог до стану перегляду наконечників. Раніші запуски процесу збирання змінили деякі файли та додали деякі файли, які я не хочу робити, тому у мене є локальні зміни та файли, які не додаються до сховища.

Який найпростіший спосіб зняти все це та отримати чистий робочий каталог, який має останню версію?

В даний час я роблю це:

hg revert --all
<build command here to delete the contents of the working directory, except the .hg folder.>
hg pull
hg update -r MY_BRANCH

але, схоже, має бути простіший спосіб.

Я хочу зробити еквівалент видалення репо, робити новий клон та оновити. Але РЕПО занадто великий, щоб бути досить швидким.


1
Чи "(видалити вміст ...)" коментар до команди "повернути - все" або етап, який ви виконуєте? Я прошу, тому що "hg update" оновить лише ті файли, які змінилися. Якщо ви видалите інші файли перед оновленням, вони не повернуться, якщо ви не оновите їх до нульової редакції ( hg update 00) та не повернетеся до кінця. Чому hg revert --allнедостатньо, щоб повернутися до постійного стану робочої папки перед витягуванням та оновленням?
Лассе В. Карлсен

це окремий крок, зроблений із моїм програмним забезпеченням для збирання. (Я міг лише скористатися видаленням командного рядка, але не став.)
Рорі

1
Можливо, ви знайдете archiveкоманду, яка буде корисною в майбутньому. Наприклад, ви могли hg archive ../newbuild, і hg updateтам буде розміщено знімок останнього сховища . Я, як правило, роблю це для нічних будівель просто так, щоб не ризикувати захаращувати репо. Просто видаліть каталог збірок, коли він більше не потрібен.
Тім Пост

Відповіді:


212

Ці кроки слід мати можливість скоротити до:

hg pull
hg update -r MY_BRANCH -C

-CПрапор вказує команду поновлення , щоб скасувати всі локальні зміни перед оновленням.

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

hg pull
hg update -r MY_BRANCH -C
hg purge

У будь-якому випадку, немає жодної команди, з якої можна попросити Меркуріал виконати все, що ви хочете тут, за винятком випадків, якщо ви зміните процес на той "повний клон" метод, який, на вашу думку, ви не можете виконати.


6
Спасибі, мені була потрібна «чистка». Оновлення -C не позбудеться від некрашених файлів, і це головне, з чим я зіткнувся.
Рорі

4
Ви також можете використовувати TortoiseHg для очищення. Вам просто потрібно ввімкнути розширення в налаштуваннях верстака (або відредагувати mercurial.ini).
Дейв

18
Якщо розширення продувки не активовано, ви також можете скористатись такою командою: hg --config "extensions.purge=" purge --all
Samuel Delisle

5
@ csharptest.net hg purge --allпросто запаморочив мене, оскільки він також видалив мої локальні конфігурації, тобто: користувач бази даних / пароль і т.д. :)
VMC

@SamuelDelisle дякую, добрий сер, я не хотів робити жодних змін конфігурації тільки для цієї одноразової команди в моєму сценарії!
joonas.fi

113
hg up -C

Це видалить усі зміни та оновиться до останнього заголовка в поточній гілці.

Ви можете увімкнути розширення очищення, щоб мати змогу видаляти і всі неперевершені файли.


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

7
@Rory: ні, hg purgeпризначений для файлів, що не переглядаються.
zerkms

10

Щоб видалити без відстеження на * nix без розширення очищення, яке ви можете використовувати

hg pull
hg update -r MY_BRANCH -C
hg status -un|xargs rm

Який використовує

update -r --rev версія REV

update -C - очистити відкинути незапрошені зміни (резервного копіювання немає)

status -u --невідомий показ лише невідомих (не відстежуваних) файлів

status -n - no-status приховати статус префікса


4

Якщо ви шукаєте простий метод , то, можливо, ви захочете спробувати це.

Я для себе навряд чи запам'ятаю командні лінії для всіх своїх інструментів, тому прагну це робити за допомогою інтерфейсу:


1. Спочатку виберіть "здійснити"

Здійснити

2. Потім виведіть проігноровані файли. Якщо у вас залишилися зміни, прихойте їх.

Показати проігноровані файли

3. Тепер виберіть їх усіх і натисніть «Видалити неперевершене».

Видаліть їх

Зроблено. Це процедура, яку запам'ятовується набагато простіше, ніж речі командного рядка.


Я не впевнений (я сам використовую SourceTree), але, здається, ці скріншоти зроблені з TortoiseHg Workbench. Взагалі, я думаю, що рішення на основі інтерфейсу є корисними, але ця відповідь потребує кращого маркування. Також "ховати їх" звучить для мене трохи невиразно.
Джон Кумбс

3

hg статус покаже вам всі нові файли, і тоді ви можете просто їх виправити .

Зазвичай я хочу позбутися від ігнорованих та неперевершених файлів, тому:

hg status -iu                          # to show 
hg status -iun0 | xargs -r0 rm         # to destroy

А потім дотримуйтесь цього за допомогою:

hg update -C -r xxxxx

який приводить усі версії файлів у потрібний стан для перегляду xxxx


Щоб дотримуватися традиції переповнення стека, щоб сказати вам, що ви не хочете цього робити, я часто виявляю, що ця "ядерна можливість" знищила речі, які мені цікаві.

Правильний спосіб зробити це - створити варіант "очистити" в процесі збирання, а може бути, і "зробити справді чистим" і "зробити непомітним" теж.

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