svn和svn + ssh的Subversion路径差异


10

[02:48] [root @ server:〜] ps斧| grep svn 23986吗?Ss 0:00 / usr / bin / svnserve -d -r / srv / svn从参数中可以看到,我的svn根目录是/ srv / svn。

现在,来自远程机器的一些魔力...

这有效:

> svn co svn://svn-user@domain.com/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'

玩耍的几个小时,我发现appearantly如果我使用ssh隧道,我能够得到使用以下我的回购:

> svn co svn+ssh://svn-user@<putty-session-name>/srv/svn/test-repo

...这意味着我应该指定回购的完整物理路径。??

Answers:


13

正如womble所说,确实这是svn over 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
    

1
除了反向,我有同样的问题。我花了几个小时试图弄清楚为什么我不能执行svn + ssh:// host / path / to / repo,因为我运行了一个脚本,该脚本会自动将我定向到svn根目录。我需要做的只是svn + ssh:// host / repo。
Bot

是否可以将root设置为变量,然后有一些逻辑将$ @如果错误提供了根,将其从$ @中删除?这样可以防止出现@Bot之类的问题。
MattPark 2013年

5

这是因为通过SSH(svn+ssh://)进行svn 只是使用SSH作为传输来“本地”访问一个Subversion存储库,因此您可以访问整个文件系统。相比之下,Svnserve被告知“使用开始路径/srv/svn,因此您不必手动指定它。


谢谢您的意见,但不,不是。一切正常,直到我像往常一样搞砸为止。
Andrejs Cainikovs 2009年

好吧,那么,修复所有您搞砸的问题。
womble

你说得对,摇摇晃晃。似乎我已经找到问题所在。
Andrejs Cainikovs

3

您可以通过编辑subversion用户的〜/ .ssh / authorized_keys,使用svn + ssh为用户编辑ssh登录命令。用户行如下所示:

command="/usr/bin/svnserve -r /srv/svn [other svnserve options]" <key type> <user key> <key comment>

svn书中还有更多svn + ssh技巧


0

这本身更像是一个问题,但确实与此相关。

用私钥/公钥设置了svn + ssh后,我无法以这种方式使用相对路径访问我的仓库:

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

我真的无法提出解决方案...


您没有正确阅读我的答案。您应该将svnserve二进制文件重命名为svnserve.bin,然后将其中的包装器脚本另存为svnserve。或者简单地,两个文件的内容都应该交换。
Andrejs Cainikovs 2010年

我认为从authorized_keys2调用svnserve.bin并在该文件中执行svnserve应该完全相同,不是吗?我这样做是为了防止重命名svnserve二进制文件,您认为这是错误的吗?
mox601
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.