[02:48] [root @ server:〜] ps ax | grep svn 23986? Ss 0:00 / usr / bin / svnserve -d -r / srv / svn正如你从参数中看到的,我的svn根目录是/ srv / svn。
现在,来自远程机器的一些魔法…
这工作:
> svn co svn://[email protected]/test-repo
但是这不是:
> svn co svn+ssh://svn-user@<putty-session-name>/test-repo 'No repository found in 'svn+ssh://svn-user@<putty-session-name>/test-repo'
打了几个小时,我发现,如果我使用SSH隧道,我可以得到我的回购使用以下:
> svn co svn+ssh://svn-user@<putty-session-name>/srv/svn/test-repo
这意味着我应该指定回购的完整物理path。 咦?
正如womble所说,事实上,这是svn over ssh的“特征”。
我有svn + ssh工作,没有指定完整path的存储库,因为svn服务器有一个svnserve包装脚本来代替原来的svnserve二进制。 之后,在颠覆更新期间,这个脚本被原始二进制覆盖。
解:
将svnserve重命名为bin
mv /usr/bin/svnserve /usr/bin/svnserve.bin
将此脚本保存为/ usr / bin / svnserve:
#!/bin/sh exec /usr/bin/svnserve.bin -r /srv/svn "$@"
更新权限
chmod 755 /usr/bin/svnserve
这是因为SSH( svn+ssh://
)上的svn+ssh://
只是使用SSH作为传输方式访问Subversion版本库“本地”,因此您可以访问整个文件系统。 相反,Svnserve被告知“用/srv/svn
开始你的path,所以你不必手动指定它。
你可以通过编辑subversion用户的〜/ .ssh / authorized_keys来编辑使用svn + ssh的用户的ssh login命令。 用户的行如下所示:
command="/usr/bin/svnserve -r /srv/svn [other svnserve options]" <key type> <user key> <key comment>
svn书中有更多的svn + ssh技巧
这更像是一个问题本身,但它确实与这个问题有关。
设置svn + SSH与私有/公钥我不能访问我的回购使用相对path以这种方式:
svn co svn+ssh://svn@SERVERIP/simple-webapp-svn simple-webapp-svn
因为我得到这个错误:
svn: URL 'svn+ssh://svn@SERVERIP/simple-webapp-svn' doesn't exist
但只有这样:
svn co svn+ssh://svn@SERVERIP/home/svn/projects/simple-webapp-svn simple-webapp-svn
这是我在/home/svn/.ssh目录下的authorized_keys2文件
$ sudo cat /home/svn/.ssh/authorized_keys2 command="/usr/bin/svnserve.bin -t --tunnel-user=USERNAME",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa [rsa-key] [user-note]
以及Andrejs在之前的回答中提出的svnserve.bin文件
$ cat /usr/bin/svnserve.bin #!/bin/sh exec /usr/bin/svnserve -r /home/svn/projects "$@"
我甚至想过在这里列出的权限问题:
-rwxr-xr-x 1 root root 63684 2009-12-12 06:45 /usr/bin/svnserve -rwxr-xr-x 1 root root 61 2010-08-25 17:19 /usr/bin/svnserve.bin
我真的不能想出一个解决scheme…