Подтвердить что ты не робот

Как автоматически удалить все файлы .orig в рабочем дереве Mercurial?

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

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

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

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

UPDATE:

Начиная с некоторого времени Расширение Purge поставляется вместе с Mercurial и прекрасно решает эту проблему.

4b9b3361

Ответ 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