How to use Cygwin svn and TortoiseSVN both, or fixing " Unable to open an ra_local session to URL" svn error
I have SVN repo located in C:/SVNrepo. And I have a working copy created with TortoiseSVN.
Sometimes I need to access my machine remotely with just command line. I use Cygwin SSH for this.
Sometimes in Cygwin bash session I need to use svn command, for example to update or commit my project working copy.
Well. It did not work. :(
The cause is that Subversion stores path to repository in working copy directory .svn. Inside this svn repo path is set by a tool that created the working copy. If the working copy was created by TortoiseSVN, the repo path will be DOS/Windows path - C:/SVNrepo. Or whatever path you have, important is that it is in DOS/Windows convention, it starts with a drive letter followed by colon.
Cygwin in general can honor such pathes. However its svn utility cannot.
For example it will fail if you issue:
$ svn ls file:///C:/SVNrepo
svn: E180001: Unable to connect to a repository at URL 'file:///C:/SVNrepo'
svn: E180001: Unable to open an ra_local session to URL
svn: E180001: Unable to open repository 'file:///C:/SVNrepo'
Cygwin's svn honors only Cygwin's path convention - /cygdrive/c/SVNrepo.
$ svn ls file:///cygdrive/c/SVNrepo
project1/
project2/
As you can see, the repo URL has three slashes in prefix - file:///
First two belong to the prefix itself - file://. The last slash means filesystem root.
It means that when ra_local library parses the URL 'file:///C:/SVNrepo' it will take out "file://" part, and try to find '/C:/SVNrepo' directory. And, of course, it fails! - there is no such path in my system.
Despite there is C:/SVNrepo, there is no /C:/SVNrepo.
What to do?!
To create a link!
ln -s /cygdrive/c /C:
check it is created
ls -l /
...
lrwxrwxrwx 1 mark None 11 Nov 7 14:25 C: -> /cygdrive/c
...
ensure svn likes it
$ svn ls file:///C:/SVNrepo
project1/
project2/
It does!
It works now!
Sometimes I need to access my machine remotely with just command line. I use Cygwin SSH for this.
Sometimes in Cygwin bash session I need to use svn command, for example to update or commit my project working copy.
Well. It did not work. :(
The cause is that Subversion stores path to repository in working copy directory .svn. Inside this svn repo path is set by a tool that created the working copy. If the working copy was created by TortoiseSVN, the repo path will be DOS/Windows path - C:/SVNrepo. Or whatever path you have, important is that it is in DOS/Windows convention, it starts with a drive letter followed by colon.
Cygwin in general can honor such pathes. However its svn utility cannot.
For example it will fail if you issue:
$ svn ls file:///C:/SVNrepo
svn: E180001: Unable to connect to a repository at URL 'file:///C:/SVNrepo'
svn: E180001: Unable to open an ra_local session to URL
svn: E180001: Unable to open repository 'file:///C:/SVNrepo'
Cygwin's svn honors only Cygwin's path convention - /cygdrive/c/SVNrepo.
$ svn ls file:///cygdrive/c/SVNrepo
project1/
project2/
As you can see, the repo URL has three slashes in prefix - file:///
First two belong to the prefix itself - file://. The last slash means filesystem root.
It means that when ra_local library parses the URL 'file:///C:/SVNrepo' it will take out "file://" part, and try to find '/C:/SVNrepo' directory. And, of course, it fails! - there is no such path in my system.
Despite there is C:/SVNrepo, there is no /C:/SVNrepo.
What to do?!
To create a link!
ln -s /cygdrive/c /C:
check it is created
ls -l /
...
lrwxrwxrwx 1 mark None 11 Nov 7 14:25 C: -> /cygdrive/c
...
ensure svn likes it
$ svn ls file:///C:/SVNrepo
project1/
project2/
It does!
It works now!