Question supprimer les noms de fichiers du chemin spécifique?


Je me suis amusé avec l'outil Repo-Cleaner BFG afin de nettoyer l'historique d'un dépôt git en supprimant des fichiers (temporaires / grands) de plusieurs endroits de la hiérarchie des répertoires ...

c'est à dire. /root/test/a.txt /root/test2/a.txt

Maintenant, je voudrais supprimer tout références du 'test / a.txt' mais garder la version /test2/a.txt ..

Existe-t-il un moyen d'éliminer proprement ce problème avec BFG? (comme mentionné sur https://help.github.com/articles/remove-sensitive-data)

Puisque le repo a une histoire assez importante (10K commits), BFG est vraiment beaucoup plus rapide que les autres méthodes que j'ai vues jusqu'ici ...


16
2018-01-15 16:33


origine


Réponses:


Je suis le développeur de Le BFG, et je suis content que vous ayez trouvé cela utile et rapide. Une partie de la sauce spéciale qui rend le BFG si rapide, c'est qu'il est indépendant du chemin - vous ne pouvez donc pas dire directement quelque chose comme: --delete /root/test/a.txt. Je pense à l'ajout de certains supports pour une action dépendante du chemin, mais je ne veux pas que cela affecte négativement les performances.

La question clé lors du nettoyage de votre repo est la suivante: que tentez-vous de réaliser, en dehors de ces deux options:

  • Réduction de la taille du dépôt Git
  • Suppression de données privées

D'après votre question, votre seul objectif est de réduire la taille du dépôt Git. Si /root/test/a.txt est assez petit - c'est-à-dire comparable en taille au reste des fichiers légitimes de votre référentiel - vous ne pouvez pas vraiment utiliser --strip-blobs-bigger-than X pour s'en débarrasser, car cela supprimerait trop de vos autres fichiers réguliers. Mais si ça est Dans ce cas, je me contenterais de me détendre et de le laisser aller - cela ne vous coûte pas beaucoup d’espace de stockage par rapport à la totalité de votre dépôt.

Si /root/test/a.txt est assez grand pour vous déranger, vous pouvez probablement juste utiliser --strip-blobs-bigger-than X pour s'en débarrasser - rappelez-vous que le BFG protège tous les fichiers de votre commit actuel (ou même plus de branches si vous utilisez --protect-blobs-from <refs>) - si gros fichiers légitimes que vous êtes actuellement utiliser ne sera pas touché.

Si vous vraiment vouloir se débarrasser de ce pauvre fichier inoffensif, mais ne pas faire vouloir filtrer sur la taille, il existe deux options prises en charge par BFG:

Utilisation --delete-folders test

... qui supprimera le dossier entier /root/test/ (et tous les autres dossiers appelés «test»), mais pas /root/test2/. Peu utile s'il y a d'autres choses dans /root/test/ que vous voulez garder.

Utilisation --strip-blobs-with-ids <blob-ids-file>

... vous devez rechercher tous les identifiants de blob de Git /root/test/a.txt, que vous pouvez faire avec quelques commandes git comme ceci:

git log --format=%H -- /root/test/a.txt | xargs -IcommitId git rev-parse commitId:/root/test/a.txt

22
2018-01-16 21:06