[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 隧道,我可以使用以下命令获取我的 repo:
> svn co svn+ssh://svn-user@<putty-session-name>/srv/svn/test-repo
...这意味着我应该指定存储库的完整物理路径。嗯?
答案1
正如 womble 所说,这确实是 svn 相对于 ssh 的“特性”。
我让 svn+ssh 工作,而无需指定存储库的完整路径,因为 svn 服务器有一个 svnserve 包装器脚本代替了原始 svnserve 二进制文件。后来,在 subversion 更新期间,此脚本被原始二进制文件覆盖。
解决方案:
将 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
答案2
这是因为 svn over SSH ( svn+ssh://
) 只是“本地”访问 subversion 存储库,使用 SSH 作为传输,因此您可以访问整个文件系统。相比之下,Svnserve 被告知“以 开始您的路径/srv/svn
,因此您不必手动指定它。
答案3
您可以使用 svn+ssh 编辑用户的 ssh 登录命令,方法是编辑 subversion 用户的 ~/.ssh/authorized_keys。用户的行将如下所示:
command="/usr/bin/svnserve -r /srv/svn [other svnserve options]" <key type> <user key> <key comment>
还有更多 svn+ssh 技巧svn 书
答案4
这更像是一个独立的问题,但它确实与这个问题相关。
使用私钥/公钥设置 svn+ssh 后,我无法以这种方式使用相对路径访问我的 repo:
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
我真的想不出解决办法......