2009-07-01 2 views
53

Во время слияния файлов ртутных листьев .orig для любого неразрешенного файла. Но после правильного решения проблем и правильной маркировки файла он не удаляет файл .orig. Может ли он автоматически удаляться какой-либо командой?Как автоматически удалить все файлы .orig в рабочем дереве Mercurial?

Я работаю на Mac, так что я могу использовать что-то вроде:

find . -iname '*.orig' -exec rm '{}' ';' 

и псевдонима это или что-то, но я предпочел бы использовать что-то вроде очистки ... рт.ст.

UPDATE:

С некоторого времени сейчас Purge extension в комплекте с Mercurial и прекрасно решает эту проблему.

+0

Я предпочел бы ответ вдоль линий «открытого ~/.hgrc, перейти, например, к„“раздел и добавить„расширения не-туринг“плагин ... выдавать желаемое за действительное? –

ответ

66

Лично я использую

$ rm **/*.orig 

если я устану от файлов .orig. Это работает в Zsh и Bash 4 после запуска shopt -s globstar.

Но если вы используете другую оболочку или хотите встроенное решение, возможно, вам понравится purge extension (ссылка обновлена ​​2016-08-25). Это позволяет удалить все неотслеживаемые файлы с

$ hg purge 

Вы можете удалить все неотслеживаемые и игнорируемые файлы с

$ hg purge --all 

Преимущества использования hg purge в том, что это будет также очистки каталогов, которые становятся пустыми после удаления файлов , Командная строка rm просто оставит пустые каталоги.

+0

rm довольно короткий :). Но очистка удаляет все необработанные файлы - и некоторый файл, который я использую, специально не отслеживается - частная конфигурация проекта, конфигурация базы данных и т. д. – rkj

+0

ОК, чистка не касается игнорируемых файлов :) thx a lot :) – rkj

+6

Почему я получаю downvotes для этого? Это потому, что это работает только в оболочках, таких как Zsh, которые понимают '**'? Я сказал * лично *, так как это что я использую сам, а затем я дал общий кросс-платформенный ответ в виде расширения очистки. –

0

следует использовать обновление update hook

: Это запускается после обновления или объединить рабочего каталога закончил

+1

Можете ли вы быть более конкретным? Вы предлагаете удалить все файлы при фиксации? :) – rkj

+1

вы можете выполнить поиск. -Iname '* .orig' -exec rm '{}' ';' * после * слияние, см. документ для получения более подробной информации – dfa

-1

Мне не нравится выбранный ответ. Он не удаляет все на всех уровнях проекта. Я использую это:

for f in `find . | grep .orig$`; do rm "$f"; done 

работает как на Mac и * Никс

+1

Это не очень хороший ответ: имена файлов с пробелами будут прерывать вызов 'rm'. Пожалуйста, дайте мне знать, если вы исправите ответ, чтобы я мог удалить голосование. –

+1

Вам нужно добавить двойные кавычки «» вокруг переменной $ f. Это обычная проблема во многих сценариях, которые работают с файлами и каталогами, включая документацию Apple (которую я уведомил об этом несколько лет назад и по-прежнему несовместимы с примерами сценариев): P – Gary

+0

@MartinGeisler исправлен! :) –

4

Ниже будут удалены .orig файлы во всей иерархии рабочей копии, а также работает для путей, содержащих пробелы:

find . -name *.orig | while read -d $'\n' file; do rm -v "$file"; done; 

Я использую псевдоним в моем .bash_profile:

alias clearorig='echo "Removing .orig files..."; find . -name *.orig | \ 
while read -d $'\''\n'\'' file; do rm -v "$file"; done;' 
+2

Как этот трубопровод через несколько процессов лучше, чем 'find. -name '* .orig' -exec rm '{}' ';' 'или даже проще найти. -name '* .orig' -delete', где вся работа выполняется 'find' и' rm' напрямую или просто 'find' самостоятельно? – Mecki

+0

@Mecki, довольно уверен, что это не так, и что он подвержен ошибкам, когда файлы содержат странные символы ... например, новые строки. – mlissner

31

кстати. find утилита имеет действие -delete , так что вы можете ввести только:

find <path-to-files> -name '*.orig' -delete

12

Если вы просто хотите удалить.туринг файлы, и вы оказались на компьютере ОС Windows, следующий, кажется, работает хорошо:

D:\workspace>hg purge -I **/*.orig --all 

Это удалит все неотслеживаемые файлы, которые заканчиваются в .orig, но не удалять другие неотслеживаемые файлы, как и другие ответы.

Вы можете проверить это, прежде чем запустить его, поставив --print флаг, а также.

+0

Я согласен, что это лучший вариант, если у вас установлена ​​очистка. – miguelSantirso

+1

+1 работает на всех платформах. – codeturner

1

Я отправил этот ответ before. Но это правильное место для этого ответа.

Я сам сделал этот пакетный файл.

IF "%1%" == "d" (
    del /s *.orig 
    del /s *.rej 
) ELSE ( 
    del /s /p *.rej 
    del /s /p *.orig 
) 

Справка: Сохранить содержание, как orig.bat

  1. Run orig d удалить все брака и ориг файлы сразу без подтверждения
  2. Run orig для удаления файлов с подтверждением [Механизм безопасности]

Надеюсь, это полезно.

1

Я лично использую следующие из корня репо:

hg purge -p -I **/*.orig | xargs rm -f 

Это немного лучше, чем при использовании только «рт.ст. продувку» или «рт.ст. продувка --all», потому что вы можете отфильтровать конкретный файл типы, которые вы хотите включить.

Для объяснений:

  • аргумент -p выводит список файлов, которые будут очищены
  • Параметр -I аргумент Whitelist фильтрует файлы включают
  • Результирующий список передается по конвейеру xargs и выполненный с использованием команды rm -f
+1

Исправьте меня, если я ошибаюсь здесь, но не будет ли у вас всех обычных проблем, которые возникают при отправке вывода на xargs без используя флаги '-0'? На странице man: «' -0 Элементы ввода завершаются нулевым символом, а не пробелом, а кавычки и обратная косая черта не являются специальными (каждый символ берется буквально). Отключает конец строки файла, которая обрабатывается как любая другой аргумент. Полезно, когда элементы ввода могут содержать пробелы, кавычки или обратную косую черту. Опция GND find -print0 создает вход, подходящий для этого режима.«' – mlissner

+0

@mlissner, вы правы. В моем случае мы обычно не помещали пробелы или символы новой строки в имена файлов, поэтому в общем случае это решение выше не сработало. – Gary

0

Это не автоматический способ удаления дополнительных файлов, но это достаточно просто для запуска вручную.

hg st может показать неизвестно или не отслеживаются файлов. Вы можете использовать этот вывод в качестве аргумента для команды rm. Вот конкретный пример, я только что выполнил:

$ # SHOW ONLY THE CRUFT 
$ hg status --unknown 
? config/settings.rb.orig 
? lib/helpers.rb.orig 
? routes/main.rb.orig 

$ # THE CRUFT WITHOUT THE "?" PREFIX 
$ hg status --unknown --no-status 
config/settings.rb.orig 
lib/helpers.rb.orig 
routes/main.rb.orig 

$ # SAFELY REMOVE ALL CRUFT 
$ rm -- `hg st -un` 

Если пустые каталоги остались позади, в -r и -d флаги rm может помочь.

Как бонус, hg status --ignored может быть использован для очистки все эти игнорируемые файлы временные, а также файлы подкачки из вашего редактора (например, Vim).

1

Я работаю в Powershell и не нашли ответа здесь:

# NOTE: be in the root of your repository 
# fetch all .orig files recursively 
$orig = (dir *.orig -recurse) ; 

# remove each .orig file 
foreach ($item in $orig) { del $($item.FullName) ; } 

# afterwards I make sure to remove the references to the .orig files in the repo 
# then commit & push 
hg addremove ; 
hg commit -m "remove .orig" ; 
hg push ; 
0

Команда, которую я использую на Linux для очистки, сохраняет необходимость сделать свежий поиск с находкой.

Они должны быть запущены из корневой директории проекта Mercurial

hg status | grep ".orig" | cut -d ' ' -f 2- | xargs rm -f

Или, если вы хотите, чтобы удалить все неизвестные файлы.

hg status | cut -d ' ' -f 2- | xargs rm -f

Смежные вопросы