Как удалить файлы, перечисленные в.gitignore но все еще в хранилище?
У меня есть некоторые файлы в моем репозитории, которые следует игнорировать, я добавил их в .gitignore но, конечно же, они не удаляются из моего репозитория.
Итак, мой вопрос в том, есть ли волшебная команда или скрипт, использующий filter-branch, который может переписать мою историю и легко удалить все эти файлы? Или просто команда, которая создаст фиксацию, которая удалит их ?
5 ответов:
вы можете удалить их из репозитория вручную:
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
Что касается переписывания всей истории без этих файлов, я очень сомневаюсь, что есть автоматическая способ сделать это.
И мы все знаем, что переписывать историю плохо, не так ли? :)
более простой способ, который работает на любой ОС сделать
git rm -r --cached . git add . git commit -m "Removing all files in .gitignore"
вы в основном читаете все файлы, кроме тех, которые находятся в .gitignore
как файлы .gitignore не отслеживаются, вы можете использовать git clean команда для рекурсивного удаления файлов, которые не находятся под контролем версий.
использовать
git clean -xdn
выполнить пробный прогон и посмотреть, что будет удалено.
Тогда используйтеgit clean -xdf
для его выполнения.по сути,
git clean -h
илиman git-clean
(в unix) даст вам помощь.имейте в виду, что эта команда также удалит новые файлы что не в плацдарм.
надеюсь, что это помогает.
Я сделал очень простое решение, манипулируя выход .заявление gitignore с sed:
cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash
объяснение:
- печатать .gitignore file
- удалить все комментарии из печати
- удалить все пустые строки
- добавить 'git rm-r' в начало строки
- выполнить каждую строчку.