Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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.

share|improve this question

4 Answers 4

up vote 3 down vote accepted

You need to edit all the 'entries' files in your pulled repo. If the repo has a lot of directories, find + a sed script will make short work of the task.

share|improve this answer

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.

share|improve this answer
    
+1 worked perfectly with a relocated repo that also changed UUID –  Amro Aug 31 '13 at 11:06

Here is a command that does the trick:

sed -i 's/old-uuid/new-uuid/' $(find . -type f -name entries -print)

Replace old-uuid and new-uuid with the actual ids.

share|improve this answer
1  
+1Thanks for the solution. This is not working for directories having spaces. "find . -type f -name entries -exec sed -i 's/old-uuid/new-uuid/g' {} \;" without double quotes seems working. –  Tommy Oct 26 '11 at 10:32
    
sry for necroing this thread this method just saved me a bunch of time.. for others trying this out, just want to add a note. Sed on MACOX seems to need a slightly different usage, u need to say sed -i "" 's/old-uuid/new-uuid/' and it works (just the extra empty double quotes) (ref) –  Karthik T Oct 4 '12 at 3:36

The section "Managing Repository UUIDs" in svn red-bean book may have the answer you are looking for.

share|improve this answer
    
That section talks about repository UUIDs, not working copy UUIDs. –  Ioan Jan 6 '11 at 21:30
    
@Ioan: Quoting from that section: For folks using versions of Subversion earlier than 1.5, these tasks are a little more complicated. You can explicitly set a repository's UUID by piping a repository dump file stub that carries the new UUID specification through svnadmin load --force-uuid REPOS-PATH - Isn't this what you needed? –  yasouser Jan 6 '11 at 21:31
1  
Again, no, I'm not talking about repository UUIDs, but rather working copy UUIDs; working copies are the same as a checkout. –  Ioan Jan 7 '11 at 13:00
    
You cannot change the working copy UUID to that of the server repo without updating or svn switch-ing the working copy to the [new/existing] location of the repo. –  yasouser Jan 7 '11 at 13:59

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.