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