On Sep 2, 2010, at 18:51, BRM wrote: > ----- Original Message ---- > >> From: BRM <bm_witn...@yahoo.com> >> To: Ryan Schmidt <subversion-20...@ryandesign.com> >> ----- Original Message ---- >>> On Sep 2, 2010, at 11:27, BRM wrote: >>> If you can afford to have the repository offline, make a dumpfile, twiddle >>> it, load it into a new repository, and have everybody check out new working >>> copies, you >>> may want to consider doing that.
> Okay - well, I decided to try this route, but was advised to try it on a test > repository first. > Good thing - as there is a bit of an issue, and one I need to avoid if I > can... > > The issue is that an existing working copy's externals are not being updated > when 'svn update' runs, > even though the externals have changed on the server through the update. > > Here's my test: > > 1. Create a file-based repository: > > $ cd / > $ mkdir svnTest && cd svnTest > $ svnadmin create Example1 > > $ mkdir -p ~/testsvn && cd ~/testsvn > $ export SVNROOT=/svnTest > $ svn co ${SVNROOT}/Example1 example1.wc > $ cd example1.wc > $ mkdir sub1 sub2 > $ svn add sub1 sub2 > $ svn commit -m "Adding some structure for test" > $ touch sub1/file1 > $ svn add sub1/file1 > $ svn commit -m "Adding a file for test" > $ svn pedit svn:externals sub2 > > set the svn:externals to: > > sub2a file:///svnTest/Example1 > > save and quit > > $ svn update > $ svn commit -m "Adding an external for test" > > 2. Make a backup of the working copy > $ cd ~/testsvn > $ tar -jcvvf example1.wc.tar.bz2 example1.wc > > 3. Dump the repository > > $ cd /svnTest > $ svnadmin dump Example1 > Example1.dump > > 4. Switch the external reference from Example1 to Example2 > > $ cat Example1.dump | sed > 's/file:\/\/\/svnTest\/Example1/file:\/\/\/svnTest\/Example2/' > > Example1-edited.dump Do not use sed to edit a dumpfile. Use a tool designed for the task, like svndumptool. http://svn.borg.ch/svndumptool/ > 5. Load the edited dump into a new repository (Example2) > > $ cd /svnTest > $ svnadmin create Example2 > $ svnadmin load Example2 < Example1-edited.dump Because this repository is now different than it was before (the history has been edited), you must give the new repository a new UUID. svnadmin load --ignore-uuid Example2 < Example1-edited.dump Since the UUID has changed, everyone must check out new working copies; it is not possible to update or switch existing working copies to this new changed repository.