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

StackOverflow https://stackoverflow.com/questions/1067680

  •  21-08-2019
  •  | 
  •  

Вопрос

Во время слияния 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

  1. Бегать orig d удалить сразу все бракованные и исходные файлы без подтверждения
  2. Бегать 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top