Как автоматически удалить все файлы .orig в рабочем дереве Mercurial?
Вопрос
Во время слияния mercurial оставляет файл .orig для любого неразрешенного файла.Но после ручного устранения проблем и пометки файла как правильного файл .orig не удаляется.Можно ли его автоматически удалить какой-нибудь командой?
Я работаю на Mac, поэтому могу использовать что-то вроде:
find . -iname '*.orig' -exec rm '{}' ';'
и назовите его или что-то в этом роде, но я бы предпочел использовать что-то вроде очистки hg...
ОБНОВЛЯТЬ:
С некоторых пор, Расширение очистки поставляется в комплекте с Mercurial и прекрасно решает эту проблему.
Решение
Лично я использую
$ rm **/*.orig
если я устану от .orig
файлы.Это работает в Zsh и Bash 4 после запуска shopt -s globstar
.
Но если вы используете другую оболочку или хотите встроенное решение, возможно, вам понравится расширение очистки (ссылка обновлена 25 августа 2016 г.).Это позволяет вам удалить все неотслеживаемые файлы с помощью
$ hg purge
Вы можете удалить все неотслеживаемые и игнорируемые файлы с помощью
$ hg purge --all
Преимущество использования hg purge
заключается в том, что это также очистит каталоги, которые станут пустыми после удаления файлов.А rm
командная строка просто оставит пустые каталоги.
Другие советы
кстати. find
утилита имеет действие -delete
поэтому вы можете ввести только:
find <path-to-files> -name '*.orig' -delete
Если вы просто хотите удалить файлы .orig и находитесь на компьютере с Windows, то следующее, похоже, работает хорошо:
D:\workspace>hg purge -I **/*.orig --all
Это приведет к удалению всех неотслеживаемых файлов, заканчивающихся на .orig, но не удалит другой неотслеживаемые файлы, как и другие ответы.
Вы можете проверить это перед запуском, поместив --print
также установите флажок.
Следующее действие удалит файлы .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;'
вам следует использовать обновить хук
обновлять:Это запускается после обновления или слить рабочего каталога завершилось
Я опубликовал этот ответ до.Но это правильное место для этого ответа.
Я сам сделал этот командный файл.
IF "%1%" == "d" (
del /s *.orig
del /s *.rej
) ELSE (
del /s /p *.rej
del /s /p *.orig
)
Помощь:Сохраните этот контент как оригинал.bat
- Бегать
orig d
удалить сразу все бракованные и исходные файлы без подтверждения - Бегать
orig
удалить файлы с подтверждением [Механизм безопасности]
Надеюсь, это полезно.
Лично я использую следующее из корня репо:
hg purge -p -I **/*.orig | xargs rm -f
Это немного лучше, чем использовать просто «hg purge» или «hg purge --all», поскольку вы можете отфильтровать определенные типы файлов, которые хотите включить.
Для объяснения:
- Аргумент -p выводит список файлов, подлежащих очистке.
- Белый список аргумента -I фильтрует включаемые файлы.
- Полученный список передается в xargs и выполняется с помощью команды rm -f.
Я работаю в 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 ;
Это не автоматический способ удаления лишних файлов, но его достаточно просто запустить вручную.
А 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).
Команда, которую я использую в Linux для очистки, избавляет от необходимости выполнять новый поиск с помощью find.
Их необходимо запускать из корневого каталога проекта Mercurial.
hg status | grep ".orig" | cut -d ' ' -f 2- | xargs rm -f
Или если вы хотите очистить все неизвестные файлы.
hg status | cut -d ' ' -f 2- | xargs rm -f
Мне не нравится выбранный ответ.Он не удаляет все на всех уровнях проекта.Я использую это:
for f in `find . | grep .orig$`; do rm "$f"; done
Работает как на Mac, так и на *nix.