2009-08-18 8 views
8

I l'une des versions précédentes de mon code, stocké dans un référentiel Subversion, il y a des informations sensibles. Comment l'effacer en gardant toutes les autres versions?Comment effacer des informations sensibles de Subversion?

EDIT: Le référentiel est Google Code Project Hosting, donc je ne peux pas vider et restaurer le dépôt = (

+1

Je ne pense pas que vous puissiez faire quelque chose par vous-même. Pouvez-vous demander à Google de détruire le référentiel, puis de le reconstruire? –

+0

Peut-être que je peux le faire, si je choisis un nouveau nom pour le projet. –

Répondre

7

Voulez-vous que vous voulez est une SVN fonctionnalité communément appelée « oblitérer », qui malheureusement est pas encore . mis en œuvre

pour contourner ce problème, vous devrez vider, filtrer & réimporter votre dépôt Voir par exemple l'entrée dans la FAQ SVN How do I completely remove a file from the repository's history?

BTW:.. Il est dupe :-). https://stackoverflow.com/questions/663584/subversion-permanently-remove-incorrectly-checked-in-directory-project

EDIT:

Le référentiel est Google Code Project Hosting, donc je ne peux pas vider et restaurer le dépôt = (

Pour autant que je peux voir, la seule solution dans ce cas est de (demander à Google) de réinitialiser votre dépôt (voir this FAQ, et ce blog post). Ceci supprimera complètement toutes les données du référentiel (les données actuelles et l'historique), comme si vous veniez de démarrer le référentiel en utilisant svnadmin create.

De toute évidence, vous devez d'abord sauvegarder votre référentiel.

La meilleure solution est probablement:

  • créer une sauvegarde de votre repo en utilisant snvsync (ce sera aussi sauvegarder l'histoire)
  • font la décharge/filtre/restauration danse (voir ci-dessus) sur votre sauvegarde du repo, pour éliminer les commmits problématiques
  • réinitialiser le référentiel Google
  • Remets ton repo filtrée, en utilisant à nouveau snvsync (voir la FAQ How do I import my existing source code?)
7

Vous ne pouvez pas supprimer ce qui est validé pour subversion autre que le vidage complet, effacer l'original et recréer le référentiel à partir de la sauvegarde.

Si vous souhaitez supprimer complètement un fichier/chemin, vous pouvez le faire avec le svndumpfilter:

svnadmin dump /path/to/repository > svndump 
svndumpfilter exclude path/to/sensitivefile > svndump-excluded 
svnadmin create /tmp/newrepository 
svnadmin load /tmp/newrepository < svndump-excluded 

ensuite sauvegarder votre/chemin/vers/référentiel et le remplacer par/tmp/newrepository après avoir » J'ai vérifié que tout va bien.

Si vous voulez exclure une seule révision, vous auriez à faire quelque chose comme

svnadmin dump -r 0:1000 /path/to/repository > svndump1 
svnadmin dump -r 1002:HEAD --incremental /path/to/repository > svndump2 
svnadmin create /tmp/newrepository 
svnadmin load /tmp/newrepository <svndump1 
svnadmin load /tmp/newrepository <svndump2 

C'est, la révision 1001 est exclue.Vous ne pouvez pas le faire plus fine, une révision complète doit être exclue. Même chose ici, sauvegardez votre référentiel d'origine, vérifiez que tout ce qui est nécessaire dans le nouveau référentiel est là.

Questions connexes