Perbedaan jalur subversi untuk svn dan svn + ssh

10

[02:48] [root @ server: ~] ps ax | grep svn 23986? Ss 0:00 / usr / bin / svnserve -d -r / srv / svn Seperti yang Anda lihat dari argumen, dir root svn saya adalah / srv / svn.

Sekarang, sihir dari mesin jarak jauh ...

Ini bekerja:

> svn co svn://[email protected]/test-repo

Tapi ini tidak:

> svn co svn+ssh://svn-user@<putty-session-name>/test-repo
'No repository found in 'svn+ssh://svn-user@<putty-session-name>/test-repo'

Bermain-main selama beberapa jam saya telah menemukan bahwa secara muncul jika saya menggunakan ssh tunnel, saya bisa mendapatkan repo saya menggunakan berikut:

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

... yang berarti saya harus menentukan jalur fisik penuh ke repo. Hah?

Andrejs Cainikovs
sumber

Jawaban:

13

Seperti yang dikatakan womble, memang ini 'fitur' dari svn over ssh.

Saya telah svn + ssh bekerja tanpa menentukan path lengkap ke repositori karena server svn memiliki skrip wrapper svnserve sebagai pengganti biner svnserve asli. Kemudian, selama pembaruan subversi, skrip ini ditimpa oleh biner asli.

Larutan:

  1. Ganti nama svnserve menjadi bin

    mv /usr/bin/svnserve /usr/bin/svnserve.bin
    
  2. Simpan skrip ini sebagai / usr / bin / svnserve:

    #!/bin/sh
    exec /usr/bin/svnserve.bin -r /srv/svn "$@"
    
  3. Perbarui izin

    chmod 755 /usr/bin/svnserve
    
Andrejs Cainikovs
sumber
1
Saya memiliki masalah yang sama kecuali sebaliknya. Saya menghabiskan berjam-jam mencoba mencari tahu mengapa saya tidak bisa melakukan svn + ssh: // host / path / to / repo karena saya memiliki skrip yang dijalankan yang secara otomatis mengarahkan saya ke svn root. Yang perlu saya lakukan adalah svn + ssh: // host / repo.
Bot
Bisakah root diatur sebagai variabel, dan kemudian memiliki beberapa logika yang menghapus root dari $ @ jika disediakan secara keliru? Ini akan mencegah masalah seperti @Bot.
MattPark
5

Itu karena svn over SSH ( svn+ssh://) hanya mengakses repositori subversi "lokal", menggunakan SSH sebagai transport, dan karenanya Anda memiliki akses ke seluruh sistem file. Svnserve, sebaliknya, diberi tahu "mulai jalur Anda dengan /srv/svn, dan jadi Anda tidak harus menentukannya secara manual.

womble
sumber
Terima kasih atas pendapat Anda, tetapi tidak, tidak. Semuanya bekerja dengan baik sampai semuanya kacau, seperti biasanya.
Andrejs Cainikovs
Nah, kalau begitu, perbaiki apa pun yang Anda lakukan.
womble
Kamu benar, womble. Sepertinya saya sudah menemukan di mana masalahnya.
Andrejs Cainikovs
3

Anda dapat mengedit perintah login ssh untuk pengguna yang menggunakan svn + ssh, dengan mengedit tombol ~ / .ssh / authorized_key dari pengguna subversi. Baris untuk pengguna akan terlihat seperti:

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

Ada lebih banyak trik svn + ssh di buku svn

Slubman
sumber
0

ini lebih seperti pertanyaan dengan sendirinya, tetapi ini benar-benar terkait dengan yang ini.

Setelah mengatur svn + ssh dengan kunci privat / publik saya tidak dapat mengakses repo saya menggunakan jalur relatif dengan cara ini:

svn co svn+ssh://svn@SERVERIP/simple-webapp-svn simple-webapp-svn

karena saya mendapatkan kesalahan ini:

svn: URL 'svn+ssh://svn@SERVERIP/simple-webapp-svn' doesn't exist

tetapi hanya seperti itu:

svn co svn+ssh://svn@SERVERIP/home/svn/projects/simple-webapp-svn simple-webapp-svn

Ini adalah file Authorized_keys2 yang saya miliki di dalam direktori /home/svn/.ssh

$ 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]

dan file svnserve.bin yang disarankan oleh Andrejs di jawaban sebelumnya

$ cat  /usr/bin/svnserve.bin 
#!/bin/sh
exec /usr/bin/svnserve -r /home/svn/projects "$@"

Saya bahkan memikirkan masalah izin, yang tercantum di sini:

-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

Saya benar-benar tidak dapat menemukan solusi ...

mox601
sumber
Anda tidak membaca jawaban saya dengan benar. Anda harus mengganti nama svnserve biner menjadi svnserve.bin, dan menyimpan skrip wrapper yang Anda miliki di sana sebagai svnserve. Atau sederhananya, isi kedua file Anda harus ditukar.
Andrejs Cainikovs
Saya pikir memanggil svnserve.bin dari Authorized_keys2 dan dalam file yang mengeksekusi svnserve harus persis sama, bukan? Saya memang seperti itu untuk mencegah penggantian nama biner svnserve, apakah Anda pikir itu salah?
mox601