tags:

views:

207

answers:

3

I one of the previous versions of my code, stored in a Subversion repository, there is sensitive information. How to erase it while keeping all other versions?

EDIT: The repository is Google Code Project Hosting, so I can't dump and restore the repository =(

+7  A: 

Want you want is a SVN feature commonly called "obliterate", which unfortunately still is not implemented.

As a workaround, you will have to dump, filter & reimport your repository. See e.g. the entry in the SVN faq How do I completely remove a file from the repository's history?.

BTW: It's a dupe :-). http://stackoverflow.com/questions/663584/subversion-permanently-remove-incorrectly-checked-in-directory-project

sleske
+1  A: 

It's a bit of work, but fortunately there are good explanations around, such as this one by Rob Gonda.

Fredrik Mörk
+3  A: 

You can't remove what's commited to subversion other than completely dump, erase the original, and recreate the repository from the dump.

If you want to completely remove a file/path, you can do that with the svndumpfilter:

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

Then backup your /path/to/repository and replace it with /tmp/newrepository after you've verified everything is ok.

If you want to only exclude a single revision, you'd have to do something like

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

That is, revision 1001 is excluded. You can't do it more fine grained btw, a whole revision have to be excluded. Same deal here, backup your original repository, verify that everything needed in the new repository is there.

nos