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

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
    

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.


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


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 ...


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.