Як видалити всі незараховані файли зі свого робочого каталогу в Mercurial?


207

Чи можна видалити всі незаймані файли з мого робочого каталогу? Скажімо, я додав купу файлів у свою робочу директорію, не додав їх через 'hg add' і тепер хочу повністю позбутися цих нових файлів?

Я в Windows, хоча я використовую PowerShell, тому комбіноване рішення також можливе тут.

Відповіді:


286

Додайте Mercurial Extension під назвою очищення . Він розповсюджується Mercurial.

Це розширення додає команду “очищення” до “hg”, яка видаляє файли, не відомі Mercurial. тобто відслідковуються файли. Отже, ваша команда була б,

hg purge

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

Щоб встановити це розширення, додайте це до файлу налаштувань mercurial (.hgrc на Unix, Mercurial.ini для Windows)

[extensions]
purge = 

Щоб увімкнути це розширення тимчасово, ви можете використовувати

hg purge --config extensions.purge= 

26
hg purge --allвидалить усі не відстежені та проігноровані файли. Це корисно для очищення будівель у джерелах
tacaswell

22
щоб увімкнути тимчасовий ext, який ви можете використовуватиhg purge --config extensions.purge=
Pykler

121

Правильний спосіб без продувки:

hg st -un0 | xargs -0 rm

1
@simplyharsh такий спосіб кращий чи ви просто вважаєте, що це менше роботи, ніж додавання розширення?
Яков Куперман

3
@YaakovKuperman Я думаю, що додавання розширення є меншою роботою, ніж ця команда (одноразове включення). Я не вмикаю розширення очищення, тому що мені це потрібно рідше, ніж раз на два тижні. Також зателефонуйте мені, але введення цієї команди дає мені достатньо часу для того, щоб подумати ще раз, перш ніж зробити щось таке дескруктивне, як «чистка».
simpleharsh

2
@simplyharsh, це має сенс, але є дві причини, щоб я все-таки пішов на очищення. По-перше, ви можете зробити hg очищення - print і переглянути список того, що слід позбутися, перш ніж робити чистку. По-друге, якщо ви зробите це так, вам потрібно бути в корені репо, щоб воно працювало.
Яков Куперман

1
@javawizard: Це приємне, що змусило мене переосмислити, як працює hg. Однак він працює лише тому, що rm -rf *пропускає точкові файли та крапки-довідники, в тому числі .hg/. Таким же чином, будь-який інший dotfile (скажімо .evil-settings) також виживе, і очищення стане кращим.
dirkjot

2
Будьте в курсі, що існує різниця в поведінці між тим, що знаходять "hg st -u" та "hg purge". 'hg st -u' НЕ знайдеш незапущені порожні каталоги, тоді як 'hg purge' знайде (та видалить) їх. Це для вас може бути або не важливо.
Майкл Кент

19

Дякую! Це працювало для мене і в Powershell:

hg st -un | rm

2
xargs не працює в powerhell - це єдина відповідь, яка не входить у "windows friendly"
Нікос Афанасьоу,

домовились ... по-друге, на xargs, які не працюють у powerhell ... очищення все ще є життєздатним варіантом, хоча
beauXjames

Працював для мене :)
Naveen Kumar V

4
rm $(hg st -u)

... де -u означає "unracked", ви також можете вибрати інший стан.


4

Можна використовувати

hg purge --all

щоб видалити всі проігноровані та незаймані файли

(спочатку потрібно встановити розширення продувки, як пояснено в деяких відповідях)




2

якщо ви не хочете використовувати чистку:

rm $(hg st | grep ^? | awk '{print $2}')

0

Припускаючи, що ви використовуєте систему * nix, ви можете запустити щось подібне:

rm `hg st | awk '/\?/ {print $2}'`

від кореня ртутного сховища.

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

Будь ласка, використовуйте цю команду обережно, оскільки вона не була ретельно перевірена.

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