I started using a program called PowerFolder recently; it's a
synchronization program. Unfortunately, a combination of me allowing
it to delete empty directories and a bug in the program resulted in
havoc being wreaked on my SVN directories and a few of my files.
I have been able to recover, for all intents and purposes, by dragging
copies back out of the Repository Explorer where the files had been
removed, and they were picked up again in their correct state
(modified, up-to-date, whatever). However, these same files seem to be
lacking corresponding .svn-base files in the .svn\text-base folder,
invariably. Restoring all of these manually would be a nightmare, and
I still have another repository to recover.
The other thing that happened was that my .svn\tmp\entries files were
pretty much all wiped. I found that by simply creating an empty
entries file in a \tmp directory, I could fix this.
Overall, my recovery method has been effective, but very slow to do
manually. I am planning to write a simple program in Visual C# .NET
2008 to basically do what I've been doing (for now, I've just been
committing the most important files directly to avoid errors):
1. Iterate recursively through each versioned directory (meaning
a .svn subdirectory exists).
2. If the .svn directory has no child tmp directory, create one, and
write a file called entries in text mode into that directory (or just
copy a pre-made skeleton tmp directory with an entries file inside of
it into the .svn directory)
3. Build a list of the files in text-base without their .svn-base
extensions.
4. Compare this list to the list of files in the directory that
the .svn directory is governing and build a list of those that have no
corresponding .svn-base entry.
5. Copy the files with no .svn-base entry into .svn\text-base. These
files will generally be ones that were copied from the repo-browser,
so this should be valid.
Then I will manually run a Cleanup after all is said and done, and it
should work, I should be able to update and hopefully get to a good
state and then commit anything I need to.
Does anyone see loopholes or omissions in my logic? It seems like
it'll work to me, even though it's kinda hoakey, and maybe that's why
I can't find a utility for it on the Internet. Or maybe there is a
better way. I don't want to do a fresh checkout because I'll lose my
modified files (modified in comparison to the repo). I've already
unversioned several directories, and I know SVN is going to complain
when I try to add them back, and I'll have to do some housekeeping on
the repository again. But that should be manageable manually, cuz I'm
not bold enough to try touching anything in the repository itself!
Kevin
------------------------------------------------------
http://tortoisesvn.tigris.org/ds/viewMessage.do?dsForumId=757&dsMessageId=1143642
To unsubscribe from this discussion, e-mail: [dev-unsubscribe_at_tortoisesvn.tigris.org].
Received on 2009-02-13 02:53:11 CET