Git - Удалить все файлы определенного типа из репозитория

Как удалить все файлы определенного типа из репозитория? я использую

git filter-branch --index-filter 'git rm -rf --cached **/*.jar'

Либо git не расширяет глобусы, либо не расширяется** так, как я ожидаю.

 CodeWizard10 авг. 2016 г., 22:24
Вы хотите удалить их из индекса или сформировать репо? фильтр-ветка "очистит" ваш репо
 Limited Atonement23 мар. 2018 г., 19:45
@CodeWizard Вы правы, я неправильно сформулировал вопрос!

Ответы на вопрос(4)

Самый простой способ, который я нашел, это использоватьBFG Repo-Cleaner

Инструкции на странице проекта понятны. Команда, которую вы бы использовали, выглядит примерно так:

bfg --delete-files "*.jar"  my-repo.git

BFG очистит историю репо всех файлов, заканчивающихся расширением .jar. Затем вы можете проверить результат, прежде чем отправить его обратно на сервер.

Решение Вопроса
git filter-branch --index-filter 'git rm -rf --cached **/*.jar'

*) соответствуют разделителям пути. Так,**/*.jar эквивалентно*.jar.

Это также означает, что*/a*.jar Матчиdir1/abc/dir2/log4j.jar, Если вы хотите соответствовать что-то вроде**/a*.jar (все банки, название которых начинается сa в любом каталоге), вы должны использовать найти. Вот команда, чтобы удалить все банки, чьи имена начинаются сa или жеbи любые банки вdir1/dir2и любой файл .txt в любом каталоге:

git filter-branch --index-filter 'git rm -rf --cached "*.txt" "dir1/dir2/*.jar" $(find -type f -name "a*.jar" -o -name "b*.jar")'

Рекомендации:pathspec разделgit help glossary.

но для тех, кто интересуется, как это сделать на Linux-машине, вы можете использовать

git ls-files | grep "\.sh$" | { while IFS= read -r line; do git rm --cached "$line"; done }

Здесь мы перечисляем все файлы в git index и перенаправляем этот вывод в команду grep только для фильтрации.sh файлы и чем для каждого файла мы выполняемgit rm --cached <file>.

чтобы удалить все ваши банки из индекса:

git rm -r --cached **/*.jar

Запустите эту команду из корневого каталога проекта, и он очистится и удалит все ваши файлы только из промежуточной области.

 Limited Atonement12 авг. 2016 г., 17:03
Если я правильно понимаю,** там не нужно, потому что в git,* соответствует разделителям пути: -o. (увидетьpathspec подgit help glossary.)
 Limited Atonement11 авг. 2016 г., 18:23
Что расширяется**? Баш (или какая-то другая оболочка) или мерзавец? посколькуindex-filter не проверяет код, расширение bash здесь не поможет.

Ваш ответ на вопрос