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


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.