Saya memiliki repositori Git lokal. Saya ingin membuatnya tersedia di server jarak jauh, ssh-enabled. Bagaimana saya melakukan ini?
git
installation
Nips
sumber
sumber
git push origin master
gagal dengan kesalahan "repositori tidak ditemukan", cobagit update-server-info
di sisi jarak jauh, di mana Anda melakukannyagit init --bare
git update-server-info
tetapi saya mendapatkan kesalahanfatal: Unable to look up Volumes (port 9418) (nodename nor servname provided, or not known)
Untuk awalnya mengatur server Git, Anda harus mengekspor repositori yang ada ke repositori telanjang baru - repositori yang tidak berisi direktori yang berfungsi. Ini umumnya mudah dilakukan. Untuk mengkloning repositori Anda untuk membuat repositori kosong yang baru, Anda menjalankan perintah clone dengan
--bare
opsi. Dengan konvensi, direktori repositori kosong berakhir.git
, seperti:Perintah ini mengambil repositori Git dengan sendirinya, tanpa direktori yang berfungsi, dan membuat direktori khusus untuk itu saja.
Sekarang Anda memiliki salinan repositori Anda, yang perlu Anda lakukan adalah meletakkannya di server dan mengatur protokol Anda. Katakanlah Anda telah membuat server yang disebut
git.example.com
memiliki akses SSH, dan Anda ingin menyimpan semua repositori Git Anda di bawah/opt/git
direktori. Anda dapat mengatur repositori baru Anda dengan menyalin repositori kosong Anda ke:Pada titik ini, pengguna lain yang memiliki akses SSH ke server yang sama yang memiliki akses baca ke
/opt/git
direktori dapat mengkloning repositori Anda dengan menjalankanJika SSH pengguna masuk ke server dan memiliki akses tulis ke
/opt/git/my_project.git
direktori, mereka juga akan secara otomatis memiliki akses push. Git akan secara otomatis menambahkan izin menulis grup ke repositori dengan benar jika Anda menjalankan perintah git init dengan--shared
opsi.Sangat mudah untuk mengambil repositori Git, membuat versi telanjang, dan meletakkannya di server di mana Anda dan kolaborator Anda memiliki akses SSH. Sekarang Anda siap berkolaborasi pada proyek yang sama.
sumber
scp
solusi bekerja IMO lebih baik dalam praktek daripadainit --bare
. Masih terasa seperti peretasan yang jelek, meskipun untuk pertama-tama mengkloning secara lokal, kemudian menyalin ke server ... berharap git memiliki perintah untuk melakukannya dalam sekali jalan.--shared
berhasil untuk saya. Saya ingin tahu apa yang terjadi jika Anda menggunakannyagit init --shared
tanpa membuat--bare
...scp
agar sebuah remote berfungsi lebih baik jika remote tidak mendukunggit init --bare
(seperti halnya saya dengan git 1.5.5, 2008). Saya pikir ini harus bekerja bahkan jika remote tidak memiliki git sama sekali.Catatan untuk orang-orang yang membuat salinan lokal pada Windows dan ingin membuat repositori jarak jauh yang sesuai pada sistem Unix-line, di mana file teks mendapatkan akhiran LF pada klon lebih lanjut oleh pengembang pada sistem mirip Unix, tetapi CRLF berakhir pada Windows.
Jika Anda membuat repositori Windows Anda sebelum mengatur terjemahan akhir baris maka Anda memiliki masalah. Pengaturan default Git adalah tanpa terjemahan, jadi set kerja Anda menggunakan CRLF tetapi repositori Anda (yaitu data yang disimpan dalam .git) telah menyimpan file-file tersebut sebagai CRLF juga.
Ketika Anda mendorong ke remote, file yang disimpan disalin apa adanya, tidak ada terjemahan akhir baris yang terjadi. (Terjemahan akhir baris terjadi ketika file dikomit ke repositori, bukan ketika repositori didorong). Anda berakhir dengan CRLF di repositori seperti Unix, yang bukan yang Anda inginkan.
Untuk mendapatkan LF di repositori jarak jauh Anda harus memastikan LF berada di repositori lokal terlebih dahulu, dengan menormalkan kembali repositori Windows Anda . Ini tidak akan memiliki efek yang terlihat pada perangkat Windows Anda, yang masih memiliki ujung CRLF, namun ketika Anda mendorong ke remote, remote akan mendapatkan LF dengan benar.
Saya tidak yakin apakah ada cara mudah untuk mengetahui akhiran baris apa yang Anda miliki di repositori Windows Anda - saya kira Anda bisa mengujinya dengan menetapkan core.autocrlf = false dan kemudian kloning (Jika repo memiliki akhiran LF, klon akan memiliki LF juga).
sumber
Ada perbedaan menarik antara dua solusi populer di atas:
Jika Anda membuat repositori kosong seperti ini:
lalu
Kemudian git mengatur konfigurasi di 'original_repo' dengan hubungan ini:
dengan yang terakhir sebagai remote hulu. Dan remote upstream tidak memiliki remote lain dalam konfigurasinya.
Namun, jika Anda melakukannya sebaliknya:
kemudian 'my_remote.git' berakhir dengan konfigurasinya dengan 'asal' menunjuk kembali ke 'original_repo' sebagai remote, dengan remote.origin.url menyamakan dengan jalur direktori lokal, yang mungkin tidak sesuai jika akan dipindahkan ke server.
Walaupun referensi "jarak jauh" itu mudah dihilangkan nanti jika tidak sesuai, 'original_repo' masih harus diatur untuk menunjuk ke 'my_remote.git' sebagai remote up-stream (atau ke mana pun ia pergi untuk dibagikan dari). Jadi secara teknis, Anda bisa sampai pada hasil yang sama dengan beberapa langkah lagi dengan pendekatan # 2. Tapi # 1 tampaknya pendekatan yang lebih langsung untuk menciptakan "repo sentral telanjang bersama" yang berasal dari yang lokal, yang sesuai untuk pindah ke server, dengan lebih sedikit langkah yang terlibat. Saya pikir itu tergantung pada peran yang Anda inginkan repo jarak jauh untuk dimainkan. (Dan ya, ini bertentangan dengan dokumentasi di sini .)
Peringatan: Saya mempelajari hal di atas (pada tulisan ini pada awal Agustus 2019) dengan melakukan tes pada sistem lokal saya dengan repo nyata, dan kemudian melakukan perbandingan file-per-file antara hasilnya. Tapi! Saya masih belajar, jadi mungkin ada cara yang lebih benar. Tetapi tes saya telah membantu saya menyimpulkan bahwa # 1 adalah metode yang saya sukai saat ini.
sumber
Anda dapat membuat repositori bare git dengan kode berikut:
Salah satu opsi untuk memiliki repositori git jarak jauh adalah menggunakan protokol SSH:
Untuk informasi lebih lanjut, periksa referensi: Git di Server - Protokol
sumber
Anda perlu membuat direktori di server jauh. Kemudian gunakan perintah "git init" untuk mengaturnya sebagai repositori. Ini harus dilakukan untuk setiap proyek baru yang Anda miliki (setiap folder baru)
Dengan asumsi Anda telah mensetup dan menggunakan git menggunakan kunci ssh, saya menulis skrip Python kecil, yang ketika dijalankan dari direktori yang berfungsi akan mengatur sebuah remote dan menginisialisasi direktori sebagai git repo. Tentu saja, Anda harus mengedit skrip (hanya sekali) untuk memberi tahu server dan jalur Root untuk semua repositori.
Periksa di sini - https://github.com/skbobade/ocgi
sumber
Biasanya Anda dapat mengatur git repo dengan hanya menggunakan
init
perintahDalam kasus Anda, sudah ada repo pada remote yang tersedia. Bergantung pada bagaimana Anda mengakses repo jarak jauh Anda (dengan nama pengguna di dalam url atau kunci ssh yang menangani verifikasi) gunakan hanya
clone
perintah:Ada juga cara lain untuk mengkloning repo. Dengan cara ini Anda menyebutnya jika Anda memiliki pengaturan kunci ssh pada mesin Anda yang memverifikasi saat menarik repositori Anda. Ada kombinasi lain dari url jika Anda ingin memasukkan kata sandi dan nama pengguna di dalam untuk masuk ke repositori jarak jauh Anda.
sumber