I have to import an huge SVN repository that I have to transfer from one server to another. So I exported it from the old server:
svnadmin dump . > archive.sv
With a little gymnastics you can work around this using svnsync
, which has the ability to fix the EOLs. Let's say that your repository is dumped in archive.svn
.
First create the repository to load the repo back, ignoring the EOL problems:
svnadmin create repo
svnadmin load repo < archive.svn --bypass-prop-validation
Now create a new repository for copying into:
svnadmin create repo-fixed
svnsync
requires some pre-commit hook, even if you don't use it, so just use your editor to create an empty one in repo-fixed/hooks/pre-revprop-change
:
#!/bin/sh
exit 0
Initialize the destination repository for svnsync
:
svnsync init file:///path/to/repo-fixed file:///path/to/repo
Now copy the entire repository over:
svnsync sync file:///path/to/repo-fixed
Whew! svnsync
will even give you good news: NOTE: Normalized svn:* properties to LF line endings
(Why the Subversion team didn't update svnadmin
to do the same normalization is a mystery to me.)
Once that's done, dump the new repository:
svnadmin dump repo-fixed > archive-fixed.svn
You now have archive-fixed.svn
, which should be identical to archive.svn
except the EOLs have been fixed as needed.
(Optional) You can now remove the temporary repository you used for svnsync
:
rm -rf repo-fixed
Update It turns out if you load this new dump, your Subversion client gets an error: Repository UUID does not match expected UUID
. You'll have to use svnadmin setuuid ...
to change the UUID ID to what it used to be.
(This post is a culmination of a multitude of snippets and partial solutions I found around the web. Thanks to all the people who knew more than I did; I just put it all together.)
See also: