Hello,
I would like to insert an older version of a file that is already in a
repository as a specific revision of that repository.
I have searched in the SVN book, searched with Google with keywords like
"subversion file history", asked in a local newsgroup, and scanned through
the messages here since mid of March to no avail.
I think my problem is a rather complex one to describe, so I am trying to be
concise. If you need more details to give me a hint, just ask and I'll
provide them.
One should probably usually not do what I ask about, but I needed to do it,
might need to do it again, and this is why:
I have a rather old project where I did not use Subversion from the start.
Instead, I made backup copies in backup directories, one for each file,
before I did major changes in the original file. Once I became aware of the
benefits of SVN, I wanted to migrate everything into a repository, to have
the full project history in there. So I wrote a shell script that copied
the backup copies to my new working copy and committed the files in the
correct order, setting svn:date accordingly.
The problem was that this script missed to commit the first version of a
file, and I noticed that only after I had already worked with the repository
for quite a while. This is how I solved it (apparently, somewhat):
On the server:
1. Backup the entire repository $PROJECT to $BACKUP.
2. svnadmin dump $BACKUP -r 0:6 > $PROJECT-0-6.svndump
(6 was the revision with an svn:date just before the date of the old
version to be inserted)
3. Delete $PROJECT.
4. svnadmin create $PROJECT, restore config and hooks (except post-commit).
5. svnadmin load $PROJECT < $PROJECT-0-6.svndump
On the client:
6. svn checkout svn://$HOST/$PATH/$PROJECT/trunk .
7. Copy older version from backup directory to working copy,
svn add ..., svn commit.
Back on the server:
8. svnadmin dump $BACKUP -r 7:15 --incremental > $PROJECT-7-15.svndump
(16 was the revision where the file was previously first committed,
no other changes in that revision)
9. svnadmin load $PROJECT < $PROJECT-7-15.svndump
10. svnadmin dump $BACKUP -r 16 > $PROJECT-16.svndump
11. Edit $PROJECT-16.svndump to change
Node-action: add
into
Node-action: change
(otherwise `svnadmin load' would error out "path already exists")
12. svnadmin load $PROJECT < $PROJECT-16.svndump
13. svnadmin dump $BACKUP -r 17:HEAD --incremental >
$PROJECT-17-HEAD.svndump
14. svnadmin load $PROJECT < $PROJECT-17-HEAD.svndump
15. Update svn:date of new revision 7, restore of post-commit hook.
However, the issues I have with my solution are:
1. It is rather tedious to implement and eats up time better spent for
development.
2. I don't see how it could be automated.
3. I have noticed that the working copies can no longer be
updated/committed as the checksum does not match. This is a big problem
if I want to go fully open source with that project, as potential
contributors would need to rebuild their working copies every time
I find another such glitch.
SVN version on the client was/is 1.6.11 (Debian package); the server runs
`svnserve -d' from SVN 1.5.1 (Debian package).
Which better/easier/faster way to do this am I missing? Thank you very much
in advance for any suggestions.
Regards,
PointedEars