Git Server Suka GitHub? [Tutup]

412

Saya sudah lama menjadi pengguna Subversi yang akan mencoba Git. Saya telah membaca beberapa tentangnya dan memahami sifat yang didistribusikan - saya dapat melihat banyak manfaatnya.

Namun, saya suka ide server pusat yang dapat mengambil peran cadangan, sistem catatan, dll, sementara masih menggunakan Git untuk percabangan dan berbagi lokal saya. Saya tidak melakukan proyek open source, jadi saya tidak bisa menggunakan Github (tanpa membayar), jadi pertanyaan saya sebenarnya adalah: apa cara praktik terbaik untuk menjalankan server git lokal?

Saya menyadari ini mungkin bertentangan dengan pola penggunaan standar Git, tetapi ini akan berguna untuk proyek saya. Namun, segala kekhawatiran yang mungkin saya abaikan selalu diterima.

Terima kasih!

skaz
sumber
50
Menggunakan server terpusat seperti yang disebutkan itu adalah sebenarnya pola penggunaan standar untuk sistem kontrol versi terdistribusi, jadi jangan khawatir tentang itu. :-)
Aasmund Eldhuset
8
Ahh - pikir itu lebih merupakan pengecualian. Ingin menangkis "jika Anda memiliki sentralisasi maka Anda tidak mendapatkannya!" komentar. Terima kasih.
skaz
27
Pemikiran yang masuk akal. :-) Dalam pemahaman saya, poin utama dari mendistribusikan VCS bukanlah bahwa Anda seharusnya tidak memiliki repo pusat (ini sering sangat berguna), tetapi Anda tidak dipaksa untuk menggunakan repo pusat - Anda dapat melakukan komit lokal, dan mudah untuk bertukar revisi dengan orang-orang tertentu jika perlu, dan Anda bahkan dapat memiliki beberapa repo "sentral" (dalam git, repo lain, tidak peduli apa perannya, disebut remote , dan Anda dapat tambahkan sebanyak yang Anda suka). Dan DVCS sering memiliki model percabangan yang sangat fleksibel (git bersinar di sini).
Aasmund Eldhuset
15
Untuk meringkas / mengulangi komentar Aasmund: titik DVCS sering kali bukan untuk menghilangkan repositori terpusat, tetapi untuk memberikan setiap pengguna lain dengan kekuatan penuh dari VCS juga.
Cascabel
2
Google memiliki Cloud Source Repository yang memungkinkan repo pribadi: cloud.google.com/tools/cloud-repositories Juga, FWIW, tidak yakin mengapa ini ditandai sebagai off topic!
Josh M.

Jawaban:

203

Anda bisa mengatur server ssh dan menjalankan repositori pusat di sana. Semua pengembang kemudian hanya setuju (sebagai kebijakan) untuk mendorong ke server ketika mereka selesai membuat komitmen. Ini adalah pola penggunaan di tempat kerja saya. Sangat mirip CVS dan SVN.

  1. Temukan tempat untuk meletakkan repositori ( /var/gitrootmisalnya).
  2. Buat repo baru ( mkdir project.git && cd project.git && git init --bare --shared=group).
  3. Kemudian pada klien Anda, tiruan repo jarak jauh ( git clone ssh://yourserver.com/var/gitroot/project.git && cd project)
  4. tambahkan beberapa file ( git add README)
  5. melakukan ( git commit -m "Initial import"),
  6. tekan ( git push origin master)

Ini harus mengatur segalanya untuk Anda.

Chris Eberle
sumber
5
Jadi saya jelas: Instal git di server lain (dapat diakses) dan buat repo. Minta klien untuk mengkloning repo itu. Ketika klien menyelesaikan perbaikan, dorong ke repo server. Terima kasih!
skaz
8
+1. Sebagai soal fakta, ini adalah yang pola penggunaan untuk digunakan kolaboratif git.
Aasmund Eldhuset
1
Kesalahan ini terjadi ketika mendorong master asal :::: Menghitung objek: 3, selesai. Objek penulisan: 100% (3/3), 244 byte | 0 byte / s, selesai. Total 3 (delta 0), digunakan kembali 0 (delta 0) jarak jauh: kesalahan: tidak cukup izin untuk menambahkan objek ke basis data repositori ./objek jarak jauh: fatal: gagal menulis kesalahan objek: membongkar gagal: membongkar-objek abnormal keluar Ke ssh: //localhost/var/gitroot/project.git! [remote ditolak] master -> master (error unpacker error): gagal mendorong beberapa referensi ke 'ssh: //localhost/var/gitroot/project.git'
Abdo
3
Saya sudah menulis posting blog tentang cara mengatur repo git lokal beberapa waktu lalu. Maks 10 menit. Yang sulit adalah mengatur strategi cadangan server lokal yang tepat, mengatur server, dll.
atmosx
Tidak bisakah kau lari saja git init --bare project.git?
Dan Dascalescu
199

Gitorious adalah antarmuka web open source untuk git yang dapat Anda jalankan di server Anda sendiri, seperti github:

http://getgitorious.com/

Memperbarui:

http://gitlab.org/ adalah alternatif lain sekarang juga.

Pembaruan 2:

Gitorious sekarang telah bergabung dengan GitLab

Craig
sumber
5
Terlihat bagus, tetapi pengaturannya tampak berat (terutama untuk pengguna non-rel) [ cjohansen.no/en/ruby/setting_up_gitorious_on_your_own_server ]
gatoatigrado
1
Proses instalasi sedang dalam proses yang sangat disederhanakan dan dibuat lebih sedikit "Rails-y". Ada juga penginstal otomatis untuk server CentOS (dan alat prebuilt) yang tersedia di halaman Install Gitorious di getgitorious.com.
thomanil
3
Tampaknya Gitorious bukan lagi solusi hosting privat open source gratis.
Mingming
1
Jika Anda masuk ke getgitorious.com dan klik Installer di bawah Gitorious Community Edition apakah itu tidak memberi Anda solusi hosting pribadi open source gratis?
Craig
16
Juga gitlab.org adalah alternatif lain yang telah dikembangkan sejak jawaban saya.
Craig
74

Coba GitLab

Alat GUI Git terbaik yang pernah saya gunakan. Ini sangat mirip dengan GitHub.

Ini adalah open source (Lisensi MIT) dan merupakan perangkat lunak manajemen git paling banyak diinstal dengan lebih dari 25.000 instalasi. Ini memiliki rilis bulanan dan komunitas aktif dengan lebih dari 375 kontributor. Anda dapat memiliki repositori pribadi, internal dan publik tanpa batas di server Anda sendiri. Ini adalah aplikasi Ruby on Rails yang berjalan di sebagian besar platform Unix.

Plamen Nikolov
sumber
1
Saya setuju, ini luar biasa. (+1) Tetapi pada komentar ini sangat sulit untuk menginstal. Akan lebih bagus jika mereka bisa mengemas rpm, deb, dll.
Synesso
2
Saya telah menemukan setup skrip tunggal yang relatif baru untuk Ubuntu menjadi cukup bebas rasa sakit. Bahkan tanpa itu sebagian besar masalah mengikuti instruksi dari situs. Saya tidak pernah menggunakan rail atau bahkan server Ubuntu dan saya menjalankannya terlebih dahulu.
Jon Shier
Saya mengalami beberapa masalah saat mengintegrasikannya dengan Active Directory via LDAP.
riezebosch
2
Sebenarnya, saat ini GitLab cukup mudah untuk diinstal. Ini hanya masalah membongkar paket. Lihat about.gitlab.com/downloads
Job
2
Gitlab Enterprise tidak gratis tentu saja, tetapi ada edisi komunitas , yang gratis dan juga mudah dipasang. Meskipun, ini membutuhkan sekitar 800 MB ruang disk, karena menginstal beberapa mesin basis data dan banyak dependensi.
OndroMih
39

Jika Anda tidak keberatan turun dan kotor dengan baris perintah, gitolite adalah hadiah mutlak ketika bekerja di lingkungan perusahaan di mana Anda perlu menetapkan hak akses yang berbeda pada repositori yang berbeda. Ini semacam versi gitosis yang lebih baru yang disebutkan oleh @Chris.

Berikut ini ringkasan dari situs web penulis:

Gitolite memungkinkan Anda menggunakan satu pengguna di server untuk meng-host banyak repositori git dan menyediakan akses ke banyak pengembang, tanpa harus memberi mereka userid nyata atau mengakses shell ke server. Sihir penting dalam melakukan ini adalah akses skey's pubkey dan file berwenang_key, dan inspirasi adalah program yang lebih tua yang disebut gitosis.

Gitolite dapat membatasi siapa yang dapat membaca dari (mengklon / mengambil) atau menulis ke (mendorong) repositori. Itu juga dapat membatasi siapa yang dapat mendorong ke cabang atau tag apa, yang sangat penting dalam lingkungan perusahaan. Gitolite dapat diinstal tanpa memerlukan izin root, dan tanpa perangkat lunak tambahan selain git itu sendiri dan perl.

Ini memiliki set fitur yang cukup komprehensif, tetapi satu hal yang sangat saya sukai, adalah bahwa pengeditan konfigurasi sehari-hari dilakukan melalui repositori git khusus. Artinya, menambahkan pengguna itu adil

  • Tambahkan pengguna ke file konfigurasi
  • Tambahkan kunci ssh pengguna
  • Lakukan perubahan
  • Dorong ke gitolite
  • Voila, konfigurasinya hidup!

Dan ketika perlu melihat kode melalui browser, gitolite memiliki dukungan untuk konfigurasi "sinkronisasi" dengan gitweb. Atau jika Anda suka cgit , yang merupakan antarmuka web yang sangat bagus untuk git yang ditulis dalam C, lebih baik, maka Anda harus melihat caranya .

stigkj
sumber
24

Anda mungkin mempertimbangkan Gitblit , server Java View, sumber, dan pengelola repositori open-source, terintegrasi, murni untuk workgroup kecil.

James Moger
sumber
Gitblit tampaknya sempurna untuk aplikasi saya, tetapi saya khawatir bahwa rilis terakhir adalah pada 2016.
Roberto
1
@Roberto, poin yang valid. Saya kira itu tergantung pada apa yang Anda butuhkan atau apa yang penting bagi Anda. Jika itu bekerja untuk Anda apa adanya, itu masih bisa menjadi pilihan yang valid. Jika Anda khawatir tentang perbaikan bug yang tepat waktu atau membutuhkan lebih banyak fitur, itu mungkin tidak.
Florian
15

Browser Bare Bones

git instaweb --httpd=webrick

dari buku git scm

menggabungkannya dengan sesuatu seperti pendekatan yang dijelaskan di sini untuk pengembangan terdistribusi (kredit untuk datagrok untuk konsep yang dijelaskan dengan baik)

Luncurkan server git satu kali dari repositori lokal mana pun.

Saya sudah tweet ini tapi saya pikir itu bisa menggunakan beberapa ekspansi:

Aktifkan alur kerja git yang didesentralisasi: git config alias.serve "daemon --verbose --export-all --base-path = .git --reuseaddr --strict-paths .git /"

Katakanlah Anda menggunakan alur kerja git yang melibatkan bekerja dengan repositori inti "resmi" yang Anda tarik dan dorong perubahan Anda dari dan ke. Saya yakin banyak perusahaan melakukan ini, seperti halnya banyak pengguna layanan hosting git seperti Github.

Katakanlah server itu, atau Github, turun sebentar.

Bagaimanapun juga, jangan khawatir, salah satu alasan Anda menggunakan git adalah agar Anda memiliki salinan seluruh riwayat proyek di klon lokal Anda.

Anda dapat terus melakukan pengkodean dan melakukan, sementara Anda menunggu tim operasi menghidupkan kembali server. Catatan untuk diri sendiri: beli donat untuk tim operasi.

Tetapi bagaimana jika, selama waktu tidak aktif ini, Anda ingin berkolaborasi dengan orang lain, yang mungkin bukan ahli git, pada repositori yang sama?

Atau, daripada downtime, bagaimana jika Anda dan kolaborator Anda ada di lapangan, dan untuk beberapa alasan Anda tidak bisa mendapatkan VPN untuk membiarkan Anda terhubung ke repo resmi Anda?

Atau, bagaimana jika Anda dan kolaborator Anda mengeluarkan banyak perubahan eksperimental, dan meskipun Anda memiliki akses, Anda tidak ingin mendorong kekacauan yang belum selesai ke dalam repositori pusat resmi? (Bahkan tidak sebagai cabang fitur.) Mungkin Anda berada di tengah-tengah membersihkan rebase atau penggabungan bencana dan cabang-cabang ada di semua tempat.

Yah, git, seperti yang mungkin Anda sadari, adalah sistem kontrol versi "terdistribusi" .

Meskipun Anda mungkin menggunakan repositori git "resmi" pusat dalam alur kerja Anda, Anda masih memiliki kemampuan untuk menggunakan git secara peer-to-peer, di mana Anda dan kolaborator Anda hanya membangun dan berbagi komitmen satu sama lain, dan pusat Server bahkan tidak pernah tahu.

Jadi, bagaimana Anda mendapatkan cabang Anda dan berkomitmen untuk mereka, atau sebaliknya?

  • Anda dapat menggunakan fasilitas git untuk mengirim email tambalan. Tapi itu agak tidak tepat dan membutuhkan sedikit pengetahuan tentang cara menerapkan tambalan email.
  • Anda dapat membuat akun di mesin Anda sendiri untuk kolaborator Anda ssh ke. Tetapi mungkin Anda tidak memiliki akses root lokal, atau mungkin Anda tidak mempercayai mereka dengan akses SSH ke kotak Anda.
  • Anda bisa mengkloning repo Anda ke thumbdrive dan meneruskannya bolak-balik. Tapi itu agak membosankan, terutama jika Anda berada di jaringan lokal yang sama, dan memerlukan thumb drive.

Anda mungkin bisa memikirkan metode lain juga. Tetapi ada cara yang sangat mudah: jika Anda dapat melihat satu sama lain di jaringan, Anda dapat meluncurkan server git satu kali yang dapat mereka gunakan sebagai remote untuk mengkloning, mengambil, dan menarik perubahan Anda, dan membunuhnya ketika Anda selesai dengan itu.

Alat yang memungkinkan ini adalah git daemon, yang memiliki banyak opsi dan fungsionalitas, tetapi untuk tujuan mengaktifkan yang mudah ini "hanya melayani repo yang saya masuki," cara untuk menggunakannya adalah dengan membuat alias. Saya suka menyebutnya git serve. Lari:

git config --global alias.serve "daemon --verbose --export-all --base-path=.git --reuseaddr --strict-paths .git/"

Menggunakan alias sebenarnya penting, karena alias git dieksekusi di direktori dasar pohon kerja Anda. Jadi path '.git' akan selalu mengarah ke tempat yang tepat, di mana pun Anda berada dalam pohon direktori repositori Anda.

Gunakan git serveseperti baru Anda :

  1. Lari git serve. "Siap bergemuruh," itu akan melaporkan. Git buruk.
  2. Temukan alamat IP Anda. Katakan itu 192.168.1.123.
  3. Katakan "hai Jane, saya tidak siap / mampu mendorong komit ini sampai ke asal, tetapi Anda dapat mengambil komit saya ke klon Anda dengan menjalankan git fetch git://192.168.1.123/"
  4. Tekan ctrl + c ketika Anda tidak ingin lagi melayani repo itu.

Anda juga bisa memberi tahu Jane git clone git://192.168.1.123/ local-repo-namejika dia belum memiliki tiruan dari repositori. Atau, gunakan git pull git://192.168.1.123/ branchnameuntuk melakukan pengambilan dan penggabungan sekaligus, berguna jika Anda bekerja bersama pada cabang fitur.

Namun perhatikan bahwa Anda tidak boleh melakukan ini di jaringan yang bermusuhan jika Anda menyimpan rahasia di repositori Anda, karena tidak ada otentikasi. Itu tidak mengiklankan keberadaannya, tetapi siapa pun dengan pemindai port dapat menemukannya, terhubung, dan mengkloning repo Anda.

Tapi itu tidak super berbahaya karena hanya-baca secara default. Baca git daemonhalaman manual dengan hati-hati jika Anda berpikir ingin mengaktifkan akses tulis. Dalam kasus di mana Anda ingin mendapatkan komitmen kolaborator Anda, jauh lebih aman untuk membiarkannya hanya baca, dan minta kolaborator Anda untuk juga menjalankan perintah ini, sehingga Anda dapat menarik darinya.

Terkait secara tangensial: pada masalah server satu kali, jika Anda ingin berbagi sementara file statis melalui HTTP: python -m SimpleHTTPServer

Mark Essel
sumber
11

Jika Anda membutuhkan server GIT yang bagus dan mudah daripada Anda harus mencoba GitBlit. Saya juga menggunakan gitolite tetapi hanya server, dengan GitBlit Anda mendapatkan semuanya dalam satu, server, admin, repos. pengelola ... URL: http://gitblit.com/

corysus
sumber
9

https://rhodecode.com adalah aplikasi web sumber terbuka untuk Git & Mercurial yang dapat dengan mudah dipasang di bawah sistem operasi apa pun (termasuk pemasang).

RhodeCode (versi baru disebut RhodeCode Enterprise) menambahkan fitur Git yang hilang seperti review kode dan secara umum sangat cepat dan dapat diandalkan.

Sebastian
sumber
1
Saya sebenarnya menjalankan instance saya sendiri di sini: code.gmgauthier.com . Rilis 3.x sangat bersih dan stabil. Saya menggunakannya untuk lebih dari sekedar kode, sebenarnya (walaupun, ada banyak hal di sana). Saya menggunakannya untuk menyimpan salinan utama jurnal pribadi saya, naskah untuk dua buku, naskah podcast, dan draft blog. Ini ideal untuk ini, sebagian karena membuat Markdown dan RestructuredText untuk Anda, membuat konsep sangat mudah dibaca dari mana saja.
Greg Gauthier
8

Anda juga dapat menginstal Indefero , ini adalah klon GPL dari GoogleCode, karena mendukung Subversion dan Git, Anda dapat memiliki transisi yang mulus. Saya penulis Indefero.

Loïc d'Anterroches
sumber
Saya menggunakannya dan menyukainya. Tapi desainnya agak ketinggalan jaman. Apakah masih dipertahankan?
Jaroslav
8

Anda bahkan dapat menginstal GitHub di server lokal Anda (tetapi tidak gratis):

https://enterprise.github.com/

Christian Specht
sumber
8

Ini mungkin bukan pengaturan git server yang paling umum , tetapi setelah bermain dengan berbagai tata letak, alat, mirroring dan skema izin, saya akan mengatakan salah satu alternatif yang cukup solid untuk repositori perusahaan adalah Gerrit , yang mungkin tampak mengejutkan karena lebih dikenal sebagai alat ulasan kode. Kami mulai menggunakannya sebagai ulasan kode dan perlahan-lahan menjadi repositori utama kami, mencabut g3 / gitolite

  • Mudah untuk digunakan (Anda pada dasarnya menjatuhkan .war di tomcat)
  • memiliki web ui untuk mengelola repositori, grup, dan izin (atau ssh cli)
  • memiliki implementasi java ssh dan git bawaan, jadi Anda tidak perlu mengaturnya
  • Dukungan ldap untuk pengguna dan grup (biasanya suatu keharusan bagi perusahaan)
  • sistem perizinan yang sangat fleksibel (dengan grup proyek, pewarisan izin, membatasi baca / tulis / percabangan / penulisan yang tidak ditinjau / dll)
  • kemampuan ulasan kode (jika Anda menyukai hal itu)
  • repo mirroring (untuk mendorong beberapa repositori ke github atau repo publik lainnya)

Selain itu, ini digunakan oleh proyek-proyek besar (misalnya android, chrome) sehingga skala dan sekarang cukup solid. Berikan saja izin PUSH kepada pengguna Anda jika Anda ingin mengizinkan melewati bagian tinjauan kode.

simpoir
sumber
7

Untuk hosting jarak jauh Seperti yang orang lain katakan, bitbucket.org menawarkan repositori pribadi gratis, saya telah menggunakannya tanpa masalah.

Untuk jaringan lokal atau LAN, saya akan menambahkan yang ini scm-manager.org (Satu file yang dapat dieksekusi, sangat mudah dipasang, dibuat di Jawa sehingga dapat berjalan di Linux atau Windows). Jika Anda menginstalnya, ini adalah kata sandi standar.

Username: scmadmin
Password: scmadmin
Hernán Eche
sumber
3
terima kasih telah memberikan kredensial default.
Ryan Williams
6

Sementara itu, situs hosting Mercurial Bitbucket telah mulai menawarkan repositori Git juga.

Jadi jika Anda tidak memerlukan server lokal , hanya beberapa tempat sentral di mana Anda dapat meng-host repositori pribadi Git secara gratis, IMO Bitbucket adalah pilihan terbaik.

Gratis, Anda mendapatkan repositori Git dan Mercurial pribadi dan publik tanpa batas.
Satu-satunya batasan adalah bahwa dalam paket gratis, tidak lebih dari lima pengguna dapat mengakses repositori pribadi Anda (lebih dari itu, Anda harus membayar).
Lihat https://bitbucket.org/plans untuk info lebih lanjut!

Christian Specht
sumber
4

Jika Anda ingin menarik permintaan, ada proyek sumber terbuka RhodeCode dan GitLab dan Stash berbayar

joedborg
sumber
2

Jika Anda hanya ingin repositori Anda di tempat sentral, ini cukup mudah dengan kontrol versi terdistribusi seperti Git:
Anda bisa meletakkan repositori pusat Anda di beberapa folder bersama pada mesin pusat dan semua orang dapat mengkloningnya dari sana.

Jika Anda ingin situs web "nyata" di server lokal Anda, saya tahu situs web Git hosting http://repo.or.cz .
Tampaknya memiliki lebih sedikit fitur daripada GitHub, tetapi tidak seperti GitHub, Anda bisa mendapatkan kode sumber dan menyimpannya di server lokal Anda sendiri.

Penafian: Saya hanya membaca tentang repo.or.cz, saya tidak pernah mencobanya sendiri!

Christian Specht
sumber
2

untuk pengaturan sederhana, Anda dapat memberikan akses ssh ke server pusat, dan mengatur direktori kerja setiap pengguna untuk mendorong / menarik dari 'asal' ini. Itu akan menjadi pengaturan paling sederhana dan umum untuk tim kecil.

Anda mungkin juga melihat gitosis yang memberi Anda server http dan kemampuan untuk mengelolanya dari jarak jauh. Dengan begitu Anda tidak perlu memberikan akses ssh dan semua yang diperlukan untuk setiap pengendara.

sbeam
sumber
2

Untuk menambah apa yang dikatakan Chris, Anda dapat menggunakan gitosis (http://eagain.net/gitweb/?p=gitosis.git) untuk mengontrol siapa yang sebenarnya dapat mengakses repo.

Tergantung pada penggunaan Anda, Anda juga dapat menggunakan kait (dalam folder .git / kait) sehingga kode Anda akan secara otomatis ditarik ke sistem file server ketika Anda mendorong dari mesin lokal Anda. Inilah skrip yang populer untuk melakukan itu: http://utsl.gen.nz/git/post-update . Ini tidak akan diperlukan dalam semua kasus.

liamacheung
sumber
Tautan ke skrip pasca-pembaruan sudah mati ...
Morten Jensen