svn 和 svn+ssh 的 Subversion 路径差异

svn 和 svn+ssh 的 Subversion 路径差异

[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 更新期间,此脚本被原始二进制文件覆盖。

解决方案:

  1. 将 svnserve 重命名为 bin

    mv /usr/bin/svnserve /usr/bin/svnserve.bin
    
  2. 将此脚本保存为/usr/bin/svnserve:

    #!/bin/sh
    exec /usr/bin/svnserve.bin -r /srv/svn "$@"
    
  3. 更新权限

    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

我真的想不出解决办法......

相关内容