2010-08-31 3 views
2

J'ai essayé vraiment difficile de supprimer un fichier contenant des données sensibles de mon dépôt git en utilisant cette page excellente (entre autres): http://help.github.com/removing-sensitive-data/Comment puis-je supprimer un fichier de git à l'aide de filter-branch, ce qui fait que je ne peux pas encore git grep le contenu?

l'être la ligne principale:

git filter-branch --index-filter 'git rm --cached \ 
    --ignore-unmatch FileWithSecrets.java' HEAD 

Cependant, même lorsque Je suis les instructions, y compris l'élagage et la collecte des déchets des objets le fait que j'ai réécrit l'histoire ne semble pas supprimer complètement le fichier.

Le point être que je peux trouver encore le contenu du fichier à l'aide git grep: $ grep git (git rev-list --all)

.... et il apparaît toujours. Est-ce que je manque quelque chose d'évident ou de non-évident? Pourquoi puis-je encore "git grep" le contenu?

Je vois que le fichier n'est plus dans le changeset quand je fais un "git show" du commit où il a été ajouté. Mais même si je peux toujours le grep - comme s'il avait été retiré de l'histoire de la branche mais qu'il flottait toujours là-bas?

Git est amusant, cool et incroyable, mais vraiment peut secouer sa confiance en soi :)

merci !! Brendan

Répondre

3

Je n'ai pas essayé, mais depuis le dernier argument de git filtre branche est définie comme [--] [<rev-list options>...] et vous obtenez les informations sensibles des régimes à git rev-list --all, cela devrait fonctionner:

git filter-branch --index-filter 'git rm --cached \ 
--ignore-unmatch FileWithSecrets.java' -- --all 
             ^^^^^^^^ 
+0

Yup, en fournissant HEAD comme argument comme le fait OP signifie que seulement HEAD est réécrit - pas même la branche HEAD pointe vers! – Cascabel

+0

Merci beaucoup pour les réponses - soulignant à la fois l'erreur HEAD et l'argument --all. J'ai essayé la nouvelle commande + nettoyage et il n'a toujours pas supprimé le fichier des résultats "git grep". Je me demande si le problème pourrait avoir quelque chose à voir avec le fait que j'ai tagué plusieurs commits avec "git tag" et que ceux-ci sont traités comme des branches séparées. J'ai essayé de vérifier chacun d'entre eux individuellement et d'exécuter la branche de filtre ci-dessus, mais je peux toujours grep la 'chaîne secrète'. J'ai essayé de voir si je pouvais reproduire avec un simple repo, mais les commandes fonctionnent. – Brendan

+0

@Brendan http://www.kernel.org/pub/software/scm/git/docs/git-filter-branch.html#_checklist_for_shrinking_a_repository implique que vous devriez ajouter '--tag-name-filter cat' au filtre options -branch –

Questions connexes