Git Server GitHub gibi mi? [kapalı]


412

Git'i deneyecek uzun zamandır Subversion kullanıcısıyım. Bu konuda biraz okudum ve dağıtılmış doğayı anladım - birçok fayda görebiliyorum.

Ancak, Git'i yerel şubem ve paylaşımım için kullanırken yedeklemeler, kayıt sistemi vb. Rolünü üstlenebilecek merkezi bir sunucu fikrinden hoşlanıyorum. Açık kaynaklı bir proje yapmıyorum, bu yüzden Github'u (ödeme yapmadan) kullanamıyorum, bu yüzden sorum gerçekten: yerel bir git sunucusunu çalıştırmak için en iyi uygulama yolu nedir?

Bunun standart Git kullanım modeline karşı olabileceğini fark ettim, ancak projem için yararlı olacak. Ancak gözden kaçırmış olabileceğim endişeler her zaman memnuniyetle karşılanmaktadır.

Teşekkürler!


50
Açıklandığı gibi merkezi bir sunucu kullanmak , aslında dağıtılmış sürüm kontrol sistemleri için standart bir kullanım modelidir, bu yüzden endişelenmeyin. :-)
Aasmund Eldhuset

8
Ahh - bunun bir istisna olduğunu düşündüm. "Merkezileşme varsa o zaman sadece anlamıyorum!" yorumlar. Teşekkürler.
skaz

27
Makul bir düşünce. :-) Anladığım kadarıyla, dağıtılmış VCS'lerin en önemli noktası, merkezi bir repoya sahip olmamanız gerektiği değil (bu genellikle çok yararlıdır), daha ziyade merkezi repoyu kullanmak zorunda değilsiniz - yerel taahhüt eder ve gerektiğinde belirli kişilerle revizyon alışverişi yapmak kolaydır ve hatta birkaç "merkezi" depoya bile sahip olabilirsiniz (git'te, başka bir repo, ne rolü olursa olsun, uzaktan kumanda olarak adlandırılır ve İstediğin kadar ekle). Ve DVCS'lerin genellikle çok esnek dallanma modelleri vardır (git burada parlar).
Aasmund Eldhuset

15
Aasmund'un yorumunu özetlemek / yeniden ifade etmek: Bir DVCS'nin amacı genellikle merkezi depodan uzaklaşmak değil, diğer her kullanıcıya da VCS'nin tam gücünü sağlamaktır.
Cascabel

2
Google'ın özel depolara izin veren yeni bir Cloud Source Deposu vardır: cloud.google.com/tools/cloud-repositories Ayrıca FWIW, bunun neden konu dışı olarak işaretlendiğinden emin değilsiniz!
Josh

Yanıtlar:


203

Sadece bir ssh sunucusu kurabilir ve orada merkezi bir depo çalıştırabilirsiniz. Tüm geliştiriciler daha sonra (ilke olarak) taahhütte bulunduklarında sunucuya geçmeyi kabul ederler. Bu benim işyerimdeki kullanım modelidir. Çok CVS ve SVN benzeri.

  1. Havuzu koymak için bir yer bulun ( /var/gitrootörneğin).
  2. Yeni bir repo ( mkdir project.git && cd project.git && git init --bare --shared=group) oluşturun.
  3. Ardından istemcinizde, uzak repoyu ( git clone ssh://yourserver.com/var/gitroot/project.git && cd project) kopyalayın
  4. bazı dosyalar ekle ( git add README)
  5. taahhüt ( git commit -m "Initial import"),
  6. push ( git push origin master)

Bu sizin için bir şeyler ayarlamalıdır.


5
Açıkça: Git'i başka bir (erişilebilir) sunucuya kurun ve bir repo oluşturun. Müşterilerin bu repoyu klonlamasını sağlayın. İstemci bir düzeltmeyi tamamladığında, sunucu deposuna basın. Teşekkürler!
skaz

8
+1. Nitekim olarak, bu Git işbirlikçi kullanımı için kullanım deseni.
Aasmund Eldhuset

1
Bu hata, başlangıç ​​noktasını gönderirken gerçekleşti :::: Nesneleri saymak: 3, bitti. Nesneleri yazma:% 100 (3/3), 244 bayt | 0 bayt / sn, bitti. Toplam 3 (delta 0), yeniden kullanılan 0 (delta 0) uzak: hata: depo veritabanına nesne eklemek için yetersiz izin ./objects remote: fatal: nesne yazılamadı hata: paketi açma başarısız: unpack-objects anormal çıkış ssh: //localhost/var/gitroot/project.git! [uzaktan reddedildi] master -> master (paket açıcı hatası) hatası: bazı referansları 'ssh: //localhost/var/gitroot/project.git' e
iletemedi

3
Bir süre önce yerel bir git repo kurulumu hakkında bir blog yazısı yazdım . Maksimum 10 dakika. Zor olan uygun yerel sunucu yedekleme stratejileri oluşturmak, sunucuyu yönetmek, vb.
Atmosx

Sadece koşamaz git init --bare project.gitmısın?
Dan Dascalescu

199

Gitorious, github gibi kendi sunucunuzda çalıştırabileceğiniz açık kaynaklı bir web arayüzüdür:

http://getgitorious.com/

Güncelleme:

http://gitlab.org/ artık başka bir alternatif.

Güncelleme 2:

Gitorious artık GitLab ile katıldı


5
Güzel görünüyor, ancak kurulum ağır görünüyor (özellikle raylı olmayan bir kullanıcı için) [ cjohansen.no/en/ruby/setting_up_gitorious_on_your_own_server ]
gatoatigrado

1
Kurulum işlemi büyük ölçüde basitleştirilmekte ve daha az "Rails-y" haline getirilmektedir. Ayrıca getgitorious.com adresindeki Gitorious'u Yükle sayfasında CentOS sunucuları için otomatik bir yükleyici (ve önceden oluşturulmuş bir cihaz) bulunmaktadır .
thomanil

3
Görünüşe göre Gitorious artık ücretsiz bir açık kaynak kodlu özel hosting çözümü değil.
Mingming

1
Getgitorious.com adresine gidip Gitorious Community Edition altında Installer'ı tıklatırsanız, bu size ücretsiz bir açık kaynak kodlu özel hosting çözümü sunmuyor mu?
Craig

16
Ayrıca gitlab.org cevabımdan bu yana geliştirilen başka bir alternatif.
Craig

74

GitLab'ı deneyin

Şimdiye kadar kullandığım en iyi git GUI aracı. GitHub'a çok benzer.

Açık kaynak kodlu (MIT Lisansı) ve 25.000'in üzerinde kurulum ile en çok kurulu git yönetim yazılımıdır. Aylık sürümleri ve 375'in üzerinde katılımcısı olan aktif bir topluluğu vardır. Kendi sunucunuzda sınırsız özel, dahili ve halka açık depolara sahip olabilirsiniz. Çoğu Unix platformunda çalışan bir Ruby on Rails uygulamasıdır.


1
Katılıyorum, harika. (+1) Ama bu yorumdan sonra yüklemek acı verici. Onlar rpm paket olabilir, çok iyi olurdu, deb vb
Synesso

2
Ubuntu'nun oldukça acısız olması için nispeten yeni tek komut dosyası kurulumunu buldum. Onsuz bile, çoğunlukla site dışındaki talimatları izlemektir. Asla raylar veya hatta Ubuntu sunucusu kullanmadım ve ilk denemeyi çalıştırdım.
Jon Shier

LDAP üzerinden Active Directory ile tümleştirmede sorun yaşadım.
riezebosch

2
Aslında, bugünlerde GitLab'ın kurulumu oldukça kolaydır. Bu sadece bir paketin ambalajından çıkarılması meselesidir. About.gitlab.com/downloads
Job

2
Gitlab Enterprise elbette ücretsiz değil, ancak ücretsiz ve kurulumu kolay bir topluluk sürümü var . Bununla birlikte, birkaç veritabanı motoru ve çok sayıda bağımlılık yüklediği için yaklaşık 800 MB disk alanı gerektirir.
OndroMih

39

Komut satırıyla inip kirlenmenin sakıncası yoksa, gitolit , farklı depolarda farklı erişim hakları ayarlamanız gereken kurumsal bir ortamda çalışırken mutlak bir muamele. @Chris tarafından bahsedilen yeni bir gitosis versiyonudur.

Yazarın web sitesinden özet:

Gitolite, sunucuda tek bir kullanıcıyı, birçok git deposunu barındırmak ve birçok geliştiriciye, sunucuya gerçek kullanıcı kimliği veya kabuk erişimi vermek zorunda kalmadan erişmenizi sağlar. Bunu yapmanın asıl büyüsü ssh'ın pubkey erişimi ve yetkili_anahtarlar dosyasıdır ve ilham, gitoz adı verilen daha eski bir programdı.

Gitolit, bir depodan kimlerin okuyabileceğini (klonlayabileceğini / getirebileceğini) veya bir depoya yazabileceğini (gönderebileceğini) kısıtlayabilir. Ayrıca, kurumsal bir ortamda çok önemli olan hangi şubeye veya etikete kimin itebileceğini de kısıtlayabilir. Gitolit kök izinleri gerekmeksizin ve git'in kendisi ve perl'den başka ek bir yazılım olmadan kurulabilir.

Oldukça kapsamlı bir özellik seti var, ama çok sevdiğim bir şey, tüm günlük yapılandırma düzenlemesinin özel bir git deposu üzerinden yapılması. Yani, bir kullanıcı eklemek

  • Yapılandırma dosyasına kullanıcı ekle
  • Kullanıcının ssh anahtarını ekleyin
  • Değişikliği yap
  • Gitolit için itin
  • Voila, yapılandırma yayında!

Ve koda tarayıcı aracılığıyla bakmanız gerektiğinde, gitolite yapılandırmayı gitweb ile "senkronize etme" desteğine sahiptir. Ya da C ile yazılmış git için çok iyi bir web ön ucu olan cgit'i seviyorsanız , o zaman bu nasıl yapılır'a bakmalısınız .


24

Küçük çalışma grupları için açık kaynaklı, tümleşik, saf bir Java Git sunucusu, görüntüleyici ve havuz yöneticisi olan Gitblit'i düşünebilirsiniz .


Gitblit başvurum için mükemmel görünüyor, ancak son sürümün 2016 yılında olduğu beni endişelendiriyor.
Roberto

1
@Roberto, geçerli bir nokta. Sanırım neye ihtiyacınız olduğuna ya da sizin için neyin önemli olduğuna bağlı. Sizin için olduğu gibi çalışıyorsa, yine de geçerli bir seçim olabilir. Zamanında hata düzeltmeleri konusunda endişeleniyorsanız veya daha fazla özelliğe ihtiyacınız varsa, olmayabilir.
Florian

15

Bare Bones Tarayıcı

git instaweb --httpd=webrick

dan git scm kitabı

dağıtılmış geliştirme için burada açıklanan yaklaşım gibi bir şeyle birleştirin ( iyi tanımlanmış konsept için datagrok'a kredi )

Herhangi bir yerel depodan bir defalık git sunucusu başlatın.

Bunu zaten tweetledim ama biraz genişleme kullanabileceğini düşündüm:

Merkezi olmayan git iş akışını etkinleştir: git config alias.serve "daemon --verbose --export-all --base-path = .git --reuseaddr --strict-paths .git /"

Değişikliklerinizi içeri ve dışarı çektiğiniz çekirdek "resmi" bir havuzla çalışmayı içeren bir git iş akışı kullandığınızı varsayalım. Github gibi git barındırma hizmetlerinin birçok kullanıcısı gibi birçok şirketin bunu yaptığına eminim.

Diyelim ki sunucu ya da Github biraz aşağı iniyor.

Ne de olsa, git kullanmanın nedenlerinden biri endişelenmenize gerek yok, bu nedenle yerel klonunuzdaki tüm proje geçmişinin bir kopyasına sahip olmanız.

Operasyon ekibinin sunucuyu tekrar canlandırmasını beklerken kodlama ve taahhütte bulunmaya devam edebilirsiniz. Kendine not: operasyon ekibi için donut satın alın.

Peki, bu kesinti süresi boyunca, git uzmanı olmayan başka biriyle aynı havuzda işbirliği yapmak istersen ne olur?

Ya da aksama süresi yerine, siz ve ortak çalışanınız sahada bulunuyorsanız ve bir nedenden dolayı VPN'nizi resmi repolarınıza bağlanmanıza izin veremezseniz ne olur?

Ya da, siz ve işbirlikçiniz bir grup deneysel değişiklik çıkarıyorsa ve erişiminiz olsa bile, bitmemiş karışıklığınızı resmi merkezi depoya itmek istemiyorsunuz? (Özellik dalları olarak bile değil.) Belki felaket bir rebase veya birleştirme temizleme ortasında ve dalları her yerde vardır.

Git, muhtemelen bildiğiniz gibi "dağıtılmış" bir sürüm kontrol sistemidir .

İş akışınızda merkezi bir "resmi" git deposu kullanabilseniz bile, git'i eşler arası bir şekilde kullanma olanağına sahipsiniz, burada sizin ve işbirlikçiniz birbirinizi taahhüt eder ve paylaşırsınız. sunucu asla bilmek zorunda bile.

Peki, şubelerinizi ve taahhütlerinizi onlara nasıl teslim edersiniz?

  • Yamaları e-posta yamaları için kullanabilirsiniz. Ancak bu biraz yetersizdir ve e-postayla gönderilen yamaların nasıl uygulanacağı konusunda biraz bilgi gerektirir.
  • Kendi makinenizde ortak çalışanınızın ssh olması için bir hesap oluşturabilirsiniz. Ancak yerel kök erişiminiz olmayabilir veya kutunuza SSH erişimi ile onlara güvenmiyor olabilirsiniz.
  • Reponuzu bir parmak sürücüsüne klonlayabilir ve ileri geri aktarabilirsiniz. Ancak bu, özellikle aynı yerel ağda bulunuyorsanız ve bir parmak sürücü gerektiriyorsa oldukça sıkıcıdır.

Muhtemelen başka yöntemler de düşünebilirsiniz. Ama süper kolay bir yol var: ağda birbirinizi görebiliyorsanız, değişikliklerinizi klonlamak, almak ve çekmek için uzaktan kumanda olarak kullanabilecekleri tek seferlik bir git sunucusu başlatabilirsiniz. onunla yapılır.

Bunu sağlayan araç, git daemonbirçok seçenek ve işlevselliğe sahiptir, ancak bu kolay bir kerelik "sadece içinde olduğum repoyu sunmak" için bir takma ad oluşturmaktır. Aramayı seviyorum git serve. Çalıştırmak:

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

Git diğer adları çalışma ağacınızın temel dizininde yürütüldüğünden, diğer ad kullanmak çok önemlidir. Böylece '.git' yolu, deponuzun dizin ağacında nerede olursanız olun her zaman doğru yeri gösterecektir.

Yeni git serveöğenizi şu şekilde kullanın :

  1. Koş git serve. "Gürlemeye hazır," rapor edecek. Git kötü.
  2. IP adresinizi bulun. Diyelim ki 192.168.1.123.
  3. "Hey Jane, bu taahhütleri başlangıç ​​noktasına kadar itmeye hazır değilim, ama taahhütlerimi koşarak klonuna getirebilirsin git fetch git://192.168.1.123/"
  4. Bu repoya artık hizmet etmek istemiyorsanız ctrl + c tuşlarına basın.

Jane'e git clone git://192.168.1.123/ local-repo-namehenüz depodan bir klonu yoksa söyleyebilirsin . Veya git pull git://192.168.1.123/ branchnamebir özellik dalında birlikte çalışıyorsanız, bir kerede bir getirme ve birleştirme yapmak için kullanın .

Ancak, sırrınızı deponuzda saklıyorsanız bunu düşmanca ağlarda yapmamanız gerektiğini unutmayın, çünkü kimlik doğrulaması yoktur. Varlığının reklamını yapmaz, ancak bir bağlantı noktası tarayıcısı olan herkes onu bulabilir, ona bağlanabilir ve repoyu klonlayabilir.

Ancak bu çok tehlikeli değildir, çünkü varsayılan olarak salt okunurdur. git daemonYazma erişimini etkinleştirmek istediğinizi düşünüyorsanız man sayfasını dikkatle okuyun . Ortak çalışanınızın taahhütlerini almak istediğiniz durumda, onu salt okunur bırakmak ve ortak çalışanınızdan da bu komutu çalıştırmasını isteyin, böylece onlardan yararlanabilirsiniz.

Teğetsel olarak ilgili: tek seferlik sunucular konusunda, bir grup statik dosyayı geçici olarak HTTP üzerinden paylaşmak istiyorsanız: python -m SimpleHTTPServer


11

İyi, kolay GIT sunucusuna ihtiyacınız varsa GitBlit'i denemelisiniz. Ayrıca gitolite kullanıyorum ama sadece sunucu, GitBlit ile hepsi bir arada, sunucu, yönetici, depolar olsun. yönetici ... URL'si: http://gitblit.com/


9

https://rhodecode.com Git & Mercurial için herhangi bir işletim sistemine kolayca kurulabilen (bir yükleyici dahildir) açık kaynaklı bir web uygulamasıdır.

RhodeCode (yeni sürüm RhodeCode Enterprise olarak adlandırılır) kod inceleme gibi eksik Git özelliklerini ekler ve genellikle çok hızlı ve güvenilir bir şekilde konuşur.


1
Aslında kendi örneğimi burada çalıştırıyorum: code.gmgauthier.com . 3.x sürümü oldukça temiz ve kararlıdır. Aslında koddan çok daha fazlası için kullanıyorum (yine de, orada bol miktarda var). Kişisel dergilerimin ana kopyalarını, iki kitap için el yazmalarını, podcast komut dosyalarını ve blog taslaklarını saklamak için kullanıyorum. Bunun için idealdir, çünkü hem Markdown hem de RestructuredText'i sizin için yapar ve taslakları her yerden çok okunabilir hale getirir.
Greg Gauthier

8

Ayrıca Indefero'yu da yükleyebilirsiniz , hem Subversion hem de Git'i desteklediği için GoogleCode'un bir GPL klonudur, yumuşak bir geçişe sahip olabilirsiniz. Ben Indefero'nun yazarıyım.


Kullanıyorum ve beğendim. Ancak tasarım biraz modası geçmiş. Hala korunuyor mu?
Jaroslav


8

O olabilir değil en olmak yaygın Ben kurumsal depoları için bir oldukça sağlam bir alternatif olduğunu söyleyebilirim, git sunucusu kurulumu, ancak farklı düzenler, araçlar, yansıtma ve izin şemaları ile oynadı sahip Gerrit daha a olarak bilindiği gibi şaşırtıcı görünebilir, kod inceleme aracı. Kod incelemesi olarak kullanmaya başladık ve yavaş yavaş g3 / gitolite'i reddeden ana havuzumuz oldu.

  • Dağıtmak kolaydır (temelde .war dosyasını bir tomcat'e düşürürsünüz)
  • depoları, grupları ve izinleri (veya bir ssh cli) yönetmek için bir web kullanıcı arabirimine sahiptir
  • yerleşik bir java ssh ve git uygulaması vardır, bu nedenle ayarlanacak başka bir şeyiniz yoktur
  • Kullanıcılar ve gruplar için ldap desteği (genellikle şirketler için bir zorunluluktur)
  • çok esnek bir izin sistemi (proje grupları, izin devralma, okuma / yazma / dallanma / gözden geçirilmemiş yazma / vb. ile)
  • kod inceleme yetenekleri (bu işe giriyorsanız)
  • repo yansıtma (bazı depoları github'a veya diğer halka açık repolara göndermek için)

Buna ek olarak, büyük projeler (örneğin android, krom) tarafından kullanılır, bu nedenle ölçekler yapar ve şimdi oldukça sağlamdır. Kod inceleme bölümünü atlamaya izin vermek istiyorsanız kullanıcılarınıza PUSH izni verin.


7

Uzak bir barındırma için Diğerlerinin söylediği gibi bitbucket.org ücretsiz özel depolar sunuyor, sorunsuz bir şekilde kullanıyorum.

Yerel veya LAN ağı için bunu bir scm-manager.org ekleyeceğim (Tek bir yürütülebilir dosya, kurulumu gerçekten basittir, Java üzerinde yapılmıştır, böylece Linux veya Windows üzerinde çalışabilir). Yüklemeniz durumunda bunlar varsayılan şifrelerdir.

Username: scmadmin
Password: scmadmin

3
varsayılan kimlik bilgilerini sağladığınız için teşekkür ederiz.
Ryan Williams

6

Bu arada, Mercurial hosting sitesi Bitbucket de Git depoları sunmaya başladı.

Dolayısıyla , yerel bir sunucuya ihtiyacınız yoksa, özel Git depolarını ücretsiz olarak barındırabileceğiniz merkezi bir yer, IMO Bitbucket en iyi seçimdir.

Ücretsiz olarak sınırsız özel ve halka açık Git ve Mercurial depoları elde edersiniz.
Tek sınırlama, ücretsiz planda, özel depolarınıza en fazla beş kullanıcının erişebilmesidir (daha fazlası için ödeme yapmanız gerekir).
Daha fazla bilgi için https://bitbucket.org/plans adresine bakın !



2

Deponuzu merkezi bir yerde istiyorsanız, Git gibi dağıtılmış sürüm kontrolü ile bu oldukça kolaydır:
Merkezi deponuzu merkezi bir makinedeki bazı paylaşılan klasörlere koyabilirsiniz ve herkes oradan klonlayabilir.

Yerel sunucunuzda "gerçek" bir web sitesi istiyorsanız, Git barındırma web sitesini http://repo.or.cz biliyorum .
GitHub'dan daha az özelliğe sahip gibi görünüyor, ancak GitHub'ın aksine, kaynak kodunu alabilir ve kendi yerel sunucunuzda barındırabilirsiniz.

Yasal Uyarı: Sadece repo.or.cz hakkında okudum, hiç denemedim!


2

basit kurulumlar için merkezi bir sunucuya ssh erişimi sağlayabilir ve her kullanıcının çalışma dizinini bu 'başlangıç ​​noktasından' itmek / çekmek için ayarlayabilirsiniz. Bu, küçük ekipler için en basit ve ortak kurulum olacaktır.

Ayrıca size bir http sunucusu ve uzaktan yönetme yeteneği veren gitosis'e bakabilirsiniz. Bu şekilde ssh erişimi ve her banliyö için gerekli olan her şeyi vermek zorunda kalmazsınız.


2

Chris'in söylediklerine eklemek için, repoya kimlerin erişebileceğini kontrol etmek için gitosis (http://eagain.net/gitweb/?p=gitosis.git) kullanabilirsiniz.

Kullanımınıza bağlı olarak, kancaları da (.git / hooks klasöründe) kullanabilirsiniz, böylece yerel makinenizden ittiğinizde kodunuz otomatik olarak sunucunun dosya sistemine çekilir. İşte bunu yapmak için popüler bir komut dosyası: http://utsl.gen.nz/git/post-update . Bu her durumda gerekli olmayacaktır.


Güncelleme sonrası komut dosyasının bağlantısı öldü ...
Morten Jensen


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.