Как удалить файлы, перечисленные в .gitignore, но все же в репозитории?
У меня есть некоторые файлы в моем репозитории, которые следует игнорировать, я добавил их в .gitignore, но, конечно же, они не удаляются из моего репозитория.
Итак, мой вопрос: есть ли волшебная команда или script с использованием ветки фильтра, которая может переписать мою историю и легко удалить все эти файлы? Или просто команда, которая создаст коммит, который их удалит?
Ответы
Ответ 1
Вы можете удалить их из репозитория вручную:
git rm --cached file1 file2 dir/file3
Или, если у вас много файлов:
git rm --cached `git ls-files -i --exclude-from=.gitignore`
Но это не работает в Git Bash в Windows. Он выдает сообщение об ошибке. Следующее работает лучше:
git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
Что касается перезаписи всей истории без этих файлов, я очень сомневаюсь, что там есть автоматический способ сделать это.
И мы все знаем, что переписать историю плохо, не так ли?:)
Ответ 2
Более простой способ работы с любой ОС - сделать
git rm -r --cached .
git add .
git commit -m "Removing all files in .gitignore"
В основном вы читаете все файлы, кроме тех, что содержатся в .gitignore
Ответ 3
Поскольку файлы в .gitignore не отслеживаются, вы можете использовать команду git clean для рекурсивного удаления файлов, которые не находятся под управлением версиями.
Используйте git clean -xdn
для выполнения сухого хода и посмотрите, что будет удалено.
Затем используйте git clean -xdf
для его выполнения.
В принципе, git clean -h
или man git-clean
(в unix) предоставит вам помощь.
Помните, что эта команда также удалит новые файлы, которые не находятся в промежуточной области.
Надеюсь, что это поможет.
Ответ 4
Я сделал очень простое решение, манипулируя выводами инструкции .gitignore с помощью sed:
cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash
Пояснение:
- распечатать файл .gitignore
- удалить все комментарии из печати
- удалить все пустые строки
- добавить 'git rm -r' в начало строки
- выполнить каждую строку.
Ответ 5
git будет игнорировать файлы, сопоставленные шаблону .gitignore, после добавления его в .gitignore.
Но файлы, уже существовавшие в репозитории, все еще будут находиться.
используйте git rm files_ignored; git commit -m 'rm no use files'
для удаления игнорируемых файлов.