Не удается найти .gitconfig в старых Git-коммитах
-
20-08-2019 - |
Вопрос
Минуту назад я заметил , что мой .gitconfig .gitconfig -файл был общедоступен в моем репозитории.В нем содержатся мои секретные жетоны.
Я git-add -u
файл и зафиксирован.Я не уверен, удаляет ли эта команда файл и из предыдущих коммитов.
Я хочу быть уверенным и выполнить поиск по файлу в моих предыдущих коммитах таким образом, чтобы такого файла не было в моей истории.
Как вы можете выполнить поиск по файлу в предыдущих коммитах?
Я бегу
git filter-branch --tree-filter 'rm .gitconfig' master # Thanks to Greg!
Я получаю
Rewrite 84dabfa2ea195ce9aad0309216858b302150017c (1/25)rm: .gitconfig: No such file or directory
tree filter failed: rm .gitconfig
Сообщение об ошибке подсказывает мне, что у меня нет файла в моей истории фиксаций.
Есть ли какой-нибудь способ выполнить поиск по файлу в моей истории фиксаций таким образом, мне не нужно запускать удаление, чтобы увидеть, что у меня нет файла в моей истории фиксаций?
Решение
Короткий ответ:
git filter-branch --tree-filter 'rm -f .gitconfig' master
Обратите внимание на -f
.
Длинный ответ:
rm
вернул бы ненулевой код возврата, если файл не существует. filter-branch
подумайте, что это ошибка, и остановите перезапись.Добавление -f
избегайте этого.
Примечание:
Существует альтернативная команда:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch .gitconfig' master
что намного быстрее.Эта команда описана в разделе ПРИМЕРА справочной страницы.
Другие советы
Чтобы удалить файл из всей прошлой истории Git, вам нужно будет переписать все прошлые коммиты, используя что-то вроде git filter-branch
.Однако выполнение этого делает ваше новое дерево не совместимым со всеми предыдущими деревьями, поэтому делайте это с осторожностью.
Сбросьте все ewvisions в репозитории до глобальных значений по умолчанию (.gitconfig).
git filter-branch -f --commit-filter 'GIT_COMMITTER_NAME="`git config --get user.name`";GIT_AUTHOR_NAME="`git config --get user.name`";GIT_COMMITTER_EMAIL="git config --get user.email";GIT_AUTHOR_EMAIL="`git config --get user.email`";git commit-tree "$@";' HEAD