I've recently updated Subversion repositories from an old 1.2.3 version to 1.6.0 via svnadmin dump/load. The old repositories all used the same UUID (repositories were created using by copying a template repository). I've changed the UUID on a couple of the new repositories via svnadmin setuuid to be unique. I can't just relocate my existing working copies of those repositories because the UUIDs are different. I know about exporting the working copy and checking out from the new repository, but I was wondering whether there was a way to just change the UUID of the working copy in-place, like what svnadmin setuuid does for repositories.
New answer since Subversion 1.7 working copy format. You need
sqlite3 command line utility.
In the root directory of your working copy, there is now a single
.svn/ folder with a SQLite database. You can query current repository
UUID known for your working copy with:
$ sqlite3 .svn/wc.db 'select uuid from REPOSITORY where id=1' b6dc3e6c-5320-4549-b231-c153d86d7525
As a result, changing
UUID can be done with:
$ sqlite3 .svn/wc.db 'update REPOSITORY set uuid="1c0d1ec1-2326-0410-bef5-eb29cddfc032" where id=1'
Of course, keep a backup of the
.svn/wc.db file before invoking update query. There is almost no chance that your repository entity has different id or there are multiple lines in that table but you may check if you get unexpected results.
Yves Martin's answer worked great for us on a number of working copies with SVN 1.8, but we did end up running into cases where it didn't work.
Running Yves' command without "where id=1" worked in all cases for us:
$ sqlite3 .svn/wc.db 'update REPOSITORY set uuid="1c0d1ec1-2326-0410-bef5-eb29cddfc032"'
Investigating why this happened, I found out that multiple UUIDs are stored when relocating the repository, contrary to Yves' intuition that this should never happen.
A new entry into the REPOSITORY table is added after a relocate rather than updating the existing one, storing an incremented id with the new repository root and its UUID. So the cases that failed to work properly were the working copies that had already been relocated in the past: The command would appear to work, but only the initial UUID was changed, not the one currently being used.
One can check the list of stored roots and UUIDs in a working copy with this command:
$ sqlite3 .svn/wc.db 'select id,uuid,root from REPOSITORY'
I'll finally note that I had to use a different set of quotes for Windows command line / batch files, as follows:
> sqlite3.exe .svn\wc.db "update REPOSITORY set uuid='1c0d1ec1-2326-0410-bef5-eb29cddfc032'"
The section "Managing Repository UUIDs" in svn red-bean book may have the answer you are looking for.