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

У меня есть несколько файлов, например один error_log и некоторые из них могли быть случайно добавлены в git, прежде чем они были добавлены в .gitignore файл, поэтому мне интересно, как я могу удалить все экземпляры файлов с этим именем из репозитория Git?

Обратите внимание, что я хочу, чтобы они остались на сервере, поэтому я буду использовать --cached вариант.

3 ответа

find -name "error_log" | xargs git rm --cached

Должен сделать трюк

cd git-project-file

пока читаю я; do git rm --cached $PWD/$i; сделано <.gitignore

затем совершать коммиты

При этом вы удаляете эти файлы из текущих коммитов.

Если вы хотите удалить из истории, вам придется сделать больше. Итак, прокомментируйте ниже, если вам нужно это сделать.


Explaination:

Вы сказали:

У меня есть несколько файлов, например, error_log, и некоторые из них могут быть случайно добавлены в git перед добавлением в файл .gitignore...

поэтому скрипт выполняет построчное чтение файла.gitignore, поэтому скрипт выполняет цикл while, где

$ я линия

$ PWD - путь к текущему каталогу

поэтому $ PWD / $ i - это путь файла / с в каждой строке файла.gitignore.

Он запускает git rm --cached $ PWD / $ i для каждой строки в.gitignore.

если файл $ PWD / $ i не добавлен в git (т. е. если файл не входит ни в один из ваших error_logs), это не повредит. если это один из ваших error_logs, то он удаляет файл из кэша.

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

Вы должны использовать filter-branch полностью стереть его из истории коммитов (все коммиты):

git filter-branch --index-filter --prune-empty "find . -name error_log | xargs --no-run-if-empty git rm --cached --ignore-unmatch"

(Решение 5 отсюда или GitHub's удалить конфиденциальные данные)

Заметка! Таким образом вы потеряете все старые версии "error_log"! Только файл в его последнем состоянии будет доступен. Если вы хотите просто исключить файл из репо, чтобы не отслеживать его в будущем, используйте ответ@blue112

Другие вопросы по тегам