svn 및 svn + ssh의 Subversion 경로 차이


10

[02:48] [root @ 서버 : ~] ps ax | 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'

ssh tunnel을 사용하면 겉보기 에 두 시간 동안 놀았는데 다음을 사용하여 내 repo를 얻을 수 있습니다.

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

... 이것은 repo에 대한 실제 경로를 지정해야 함을 의미합니다. 응?

답변:


13

womble이 말했듯이, 실제로 이것은 ssh에 대한 svn의 '기능'입니다.

svn 서버가 원래 svnserve 바이너리 대신 svnserve 래퍼 스크립트를 가지고 있기 때문에 저장소에 대한 전체 경로를 지정하지 않고 svn + ssh가 작동했습니다. 나중에 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

루트를 변수로 설정 한 다음 실수로 제공된 경우 $ @에서 루트를 제거하는 논리가 있습니까? @Bot과 같은 문제를 방지합니다.
MattPark

5

SSH ( svn+ssh://)를 통한 svn은 SSH를 전송으로 사용하여 "로컬로"하위 버전 저장소에 액세스하기 때문에 전체 파일 시스템에 액세스 할 수 있기 때문입니다. 반대로 Svnserve는 "로 경로를 시작 /srv/svn하므로 수동으로 지정할 필요가 없습니다.


귀하의 의견에 감사드립니다 만, 아닙니다. 평소처럼 모든 것이 망칠 때까지 모든 것이 아름답게 작동했습니다.
Andrejs Cainikovs

그럼, 당신이 망친 것을 고치세요.
womble

당신 말이 맞아요 문제가있는 곳을 찾은 것 같습니다.
Andrejs Cainikovs

3

서브 버전 사용자의 ~ / .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 트릭이 있습니다


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

Authorized_keys2에서 svnserve.bin을 호출하는 것과 svnserve를 실행하는 파일에서 정확히 동일해야한다고 생각합니까? svnserve 바이너리의 이름을 바꾸는 것을 막기 위해 그렇게 좋아했습니다. 잘못 생각하십니까?
mox601
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.