Удаление конфиденциальных данных из истории Git с помощью BFG
Вот как удалить конфиденциальные данные, такие как файлы сертификатов или пароли в ваших файлах, из репозитория git и истории с помощью BFG Repo-Cleaner.
1. Удалите важные файлы и секреты из своего кода и зафиксируйте изменения.
Обратите внимание, что по умолчанию BFG не изменяет содержимое вашего последнего коммита. Итак, удалите конфиденциальные файлы и секреты из своего кода, зафиксируйте изменения и убедитесь, что ваша последняя фиксация не содержит никаких нежелательных данных, прежде чем продолжить.
2. Установите BFG
Вы можете скачать JAR с сайта. Если вы используете Mac, можно выполнить команду brew install bfg
.
3. Клонируйте новую копию вашего репо, используя флаг --mirror:
# Example
$ git clone --mirror git://example.com/my-repo.git
4. Очистите конфиденциальные файлы.
Используйте --delete-files
для уничтожения файлов в истории репо.
# Examples
$ bfg --delete-files certificate.p12 my-repo.git
$ bfg --delete-files keystore.jks my-repo.git
$ bfg --delete-files id_{dsa,rsa} my-repo.git
$ bfg --delete-files *.{txt,log} my-repo.git
Обратите внимание, что указанное имя соответствует имени файла, а не пути в репо. Так что $ bfg --delete-files path/to/certificate.p12 my-repo.git
работать не будет.
5. Очистите чувствительные строки.
Используйте --replace-text
для очистки строк из истории репо. По умолчанию каждая строка будет переписана как «*** REMOVED ***». Это двухэтапный процесс.
5.1 Создайте файл с новой строкой для каждой строки, которую вы хотите удалить
Создайте простой текстовый файл, как хотите.
# Example
echo "password123" >> passwords.txt
echo "123password" >> passwords.txt
5.2 Запустите команду
Запустите bfg --replace-text
ссылку на только что созданный файл.
# Example
$ bfg --replace-text passwords.txt my-repo.git
6. Взгляните на свою новую историю.
Войдите в папку репозитория git и убедитесь, что ваша история обновлена.
# Example
$ cd my-repo.git
# Use git commands to examine the history
$ git log
$ git show HEAD
$ git show HEAD~1
$ git show d89bb58
(Вы не увидите физические файлы своего рабочего дерева, если перечислите файлы в этом каталоге, поскольку мы сделали голый / зеркальный клон, на случай, если вам интересно.)
7. Удалите ненужные грязные данные.
После того, как вы будете удовлетворены состоянием истории, очистите эти конфиденциальные файлы.
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
8. Отправьте изменения
Наконец, как только вы будете довольны обновленным состоянием вашего репо, верните его обратно, и все готово!
$ git push
Если вы работаете в команде, попросите всех отказаться от своих старых копий репозитория и сделать новые клоны.