Impossible de trouver .gitconfig dans les anciens commits Git
-
20-08-2019 - |
Question
J'ai remarqué il y a un instant que mon fichier .gitconfig était public sur mon référentiel. Il contient mes jetons secrets.
Je git-add -u
le fichier et validé. Je ne suis pas sûr que cette commande supprime aussi le fichier des commits précédents.
Je veux être sûr et effectuer une recherche dans le fichier de mes commits précédents, de sorte qu'il n'y en ait aucun dans mon historique.
Comment effectuer une recherche dans le fichier lors des validations précédentes?
je cours
git filter-branch --tree-filter 'rm .gitconfig' master # Thanks to Greg!
je reçois
Rewrite 84dabfa2ea195ce9aad0309216858b302150017c (1/25)rm: .gitconfig: No such file or directory
tree filter failed: rm .gitconfig
Le message d'erreur me suggère que je n'ai pas le fichier dans mon historique de validation.
Existe-t-il un moyen de rechercher le fichier dans mon historique de validation de sorte que je n'ai pas besoin de supprimer le fichier pour vérifier que je n'ai pas le fichier dans mon historique de validation?
La solution
Réponse courte:
git filter-branch --tree-filter 'rm -f .gitconfig' master
Notez le -f
.
Réponse longue:
rm
renverrait un code retour non nul lorsque le fichier n'existe pas. filter-branch
pense que c'est une erreur et arrêtez la réécriture. Ajouter <=> éviter cela.
Remarque:
Il existe une commande alternative:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch .gitconfig' master
qui est beaucoup plus rapide. Cette commande est décrite dans la section EXEMPLE de la page de manuel.
Autres conseils
Pour supprimer un fichier de tout l'historique Git, vous devez réécrire tous les validations antérieures à l'aide de quelque chose comme git filter-branch
. Cependant, cela rend votre nouvel arbre impossible à fusionner avec tous les arbres passés, faites-le avec précaution.
Réinitialisez tous les ewvisions du référentiel aux valeurs par défaut globales (.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