Idiots guide to moving a directory up in SVN

Abel picture Abel · Jan 21, 2010 · Viewed 7.7k times · Source

No, this is not a duplicate of this.

While I'm normally used to using visual tools with SVN, I find myself now faced with wanting to move Repo/Parent/ChildX/ChildY to Repo/ChildY. I receive the following errors and am just looking for what I'm missing here. Consider the server just installed (from a dump), nothing else available but svn.

> svn checkout https://localhost/Repo
svn: OPTIONS of 'https://localhost/Repo': 200 OK (https://localhost)

> svn move Repo/Parent/ChildX/ChildY Repo/ChildY
svn: 'Repo' is not a working copy
svn: 'Repo' does not exist

> svn move Parent NewParent
svn: '.' is not a working directory

> svn move https://localhost/Repo/Parent NewParent 
svn: Moves between the working copy and the repository are not supported

> svn move https://localhost/Repo/Parent https://localhost/Repo/NewParent
svn: OPTIONS of 'https://localhost/Repo': 200 OK (https://localhost)

> svn commit --message "Trying to get move command to work"
svn: 'C:\SVNTest' is not a working copy

I find it somewhat odd that the first command (checkout) gives the same response for whatever I put behind 'Repo', like https://localhost/Repo/SomeNonExistingName. I'm sure I'm missing something. I found references saying that you don't need a working copy for a move, but then, how do I do a move?

None of the commands above, whether they gave an error or OK, did an actual move. I use VisualSVN Server, and can browse the repo online.


Solution

The accepted solution below and other answers have helped solve this issue. The response to the first command above is equal to a regular response from any Apache server. The 200 OK is the HTTP response.

When using VisualSVN Server, the default installation is under https://hostname/svn. To checkout, you need to prefix the repository name with that path. The first command above should've read:

> svn checkout https://localhost/svn/Repo
file1
file2
etc...
Revision XXX

Unfortunately, this little gotcha, however trivial, isn't mentioned anywhere. After the checkout, from the same directory, the move becomes trivial:

> svn move Folder/SubFolder NewFolder

Answer

kdgregory picture kdgregory · Jan 21, 2010

Assuming that you have a valid checkout, the easiest way would be something like this (where you replace REPO_URL with the correct URL):

svn co REPO_URL
cd Repo
svn mv Parent/ChildX/ChildY .
svn commit -m "moved directory"

That assumes, of course, that you don't have the standard trunk / tags / branches directories.

Which brings me to the question that you have to answer: what does the checked-out working directory look like? Does it have the structure that you expect, or does it perhaps have some directories that you don't know about? Do you see a .svn directory under Repo?


Edit: I've never used the Visual SVN server, but if you have your repository on an accessible filesystem, you could always use a "file" URL:

svn co 'file:///localhost/Repo'

Or alternatively (after have just looked at what VisualSVN calls "documentation"), I'd suggest checking out your working directory through Visual SVN, then doing the commands above.

Plus, it appears that Visual SVN creates the trunk/tags/branches directories, so you definitely want to cd into the working directory and run your commands there, once you've verified the directory structure.