A long time ago, duplicating a remote Subversion repository required to have administration rights on the machine hosting the said repository. The only solution back then was to use SVK , a defunct project that was adding a layer on top of SVN to make it a distributed SCM .
Today, to dump a repository you donβt manage, all the tools you need are available with the standard Subversion distribution.
First, letβs create an empty local SVN repository:
$ rm -rf ./svn-repo
$ svnadmin create ./svn-repo
$ sed -i 's/# password-db = passwd/password-db = passwd/' ./svn-repo/conf/svnserve.conf
$ echo "kevin = kevin" >> ./svn-repo/conf/passwd
$ kill `ps -ef | grep svnserve | grep -v grep | awk '{print $2}'`
$ svnserve --daemon --listen-port 3690 --root ./svn-repo
Now we have to make sure the synchronization utility is allowed to do anything it wants on our local repository:
$ echo "#!/bin/sh" > ./svn-repo/hooks/pre-revprop-change
$ chmod 755 ./svn-repo/hooks/pre-revprop-change
Then we have to initialize the synchronization between the remote SVN
(
https://svn.example.com/svn/internal-project
) and the local SVN
(
svn://localhost:3690
):
$ svnsync init --sync-username "kevin" --sync-password "kevin" --source-username "[email protected]" --source-password "XXXXXX" svn://localhost:3690 https://svn.example.com/svn/internal-project
Once all of this configuration is done, we can start dumping the content of the remote repository to our local copy:
$ svnsync --non-interactive --sync-username "kevin" --sync-password "kevin" --source-username "[email protected]" --source-password "XXXXXX" sync svn://localhost:3690