У меня есть несколько файлов в моем хранилище, которые следует игнорировать, я добавил их в .gitignore, но, конечно, они не удалены из моего хранилища.
Итак, мой вопрос: есть ли волшебная команда или скрипт, использующий фильтр-ветку, который может переписать мою историю и легко удалить все эти файлы? Или просто команда, которая создаст коммит, который удалит их?
Ответы:
Вы можете удалить их из хранилища вручную:
Или, если у вас много файлов:
Но это не работает в Git Bash на Windows. Выдает сообщение об ошибке. Следующее работает лучше:
Что касается переписывания всей истории без этих файлов, я очень сомневаюсь, что есть автоматический способ сделать это.
И мы все знаем, что переписывать историю плохо, не так ли? :)
источник
git ls-files -i -z --exclude-from=.gitignore | xargs -0 git rm --cached
кажется,git ls-files -i --exclude-from=.gitignore | %{git rm --cached $_}
Самый простой способ, который работает на любой ОС, это сделать
Вы в основном читали все файлы, кроме тех, что в .gitignore
источник
Поскольку файлы в .gitignore не отслеживаются, вы можете использовать команду git clean для рекурсивного удаления файлов, которые не находятся под контролем версий.
Используйте
git clean -xdn
для выполнения пробного запуска и посмотрите, что будет удалено.Затем используйте
git clean -xdf
для его выполнения.В основном,
git clean -h
илиman git-clean
(в Unix) окажет вам помощь.Помните, что эта команда также удалит новые файлы , которые не находятся в промежуточной области.
Надеюсь, поможет.
источник
.gitignore
которые отслеживаются.git clean -xdn
сухой прогон , который не будет удалять. следующий будет.Я сделал очень простое решение, управляя выводом оператора .gitignore с помощью sed:
cat .gitignore | sed '/^#.*/ d' | sed '/^\s*$/ d' | sed 's/^/git rm -r /' | bash
Объяснение:
источник
sed
это просто?В Linux вы можете использовать этот комманд:
Например, я хочу удалить "* .py ~", поэтому моя команда должна быть ==>
find . -name "*.py~" -exec rm -f {} \;
источник
Git будет игнорировать файлы, соответствующие шаблону .gitignore, после добавления его в .gitignore.
Но файлы, которые уже существовали в хранилище, будут все еще в.
используйте
git rm files_ignored; git commit -m 'rm no use files'
для удаления игнорируемых файлов.источник