it-swarm-tr.com

Git deposunu bir makinedeki birden çok kullanıcıyla nasıl paylaşabilirim?

Birden çok geliştiricinin çekmesi gereken bir hazırlama sunucusunda Git depom var. git-init aradığım şeye çok yakın bir bayrak var gibi görünüyor: --shared, ancak bu depoya birden fazla kişinin çekmesini istiyorum. git-clone 's --shared flag tamamen farklı bir şey yapar.

Mevcut bir deponun izinlerini değiştirmenin en kolay yolu nedir?

217
Andrey Fedorov

İzinler bir haşere.

Temel olarak, tüm bu geliştiricilerin git deposundaki her şeye yazabildiğinden emin olmanız gerekir.

Bir grup geliştiriciye yazma yeteneği kazandırmanın üstün yöntemi için Yeni Dalga Çözümü'ne geçin.

Standart Çözüm

Tüm geliştiricileri özel olarak oluşturulmuş bir gruba koyarsanız, prensip olarak şunları yapabilirsiniz:

chgrp -R <whatever group> gitrepo
chmod -R g+swX gitrepo

Ardından, kullanıcılar için umask değerini 002, böylece grup yazılabilir izinlerle yeni dosyalar oluşturulur.

Bununla ilgili problemler lejyon; umask/022 (varsayılan olarak herkesi içeren ortak bir users grubuna sahip olmak gibi), bu başka yerlerde güvenlik sorunlarını açabilir. Ve er ya da geç, dikkatlice hazırlanmış izinler düzeninizi bozacak, root erişimine erişene ve onu düzeltene kadar (yani yukarıdaki komutları yeniden çalıştırarak) repo'yu eylemden çıkaracak.

Yeni Dalga Çözümü

Daha az anlaşılmış olmasına rağmen ve biraz daha fazla işletim sistemi/araç desteği gerektiren üstün bir çözüm POSIX genişletilmiş özniteliklerini kullanmaktır. Bu bölgeye sadece son zamanlarda geldim, bu yüzden buradaki bilgilerim olabildiğince sıcak değil. Ancak temel olarak, genişletilmiş bir ACL, yalnızca 3 varsayılan yuvadan (kullanıcı/grup/diğer) daha fazla izin ayarlama yeteneğidir.

Bir kez daha grubunuzu oluşturun ve çalıştırın:

setfacl -R -m g:<whatever group>:rwX gitrepo
find gitrepo -type d | xargs setfacl -R -m d:g:<whatever group>:rwX

Bu grup için genişletilmiş ACL'yi ayarlar, böylece grup üyeleri zaten orada bulunan dosyaları okuyabilir/yazabilir/erişebilir (ilk satır); daha sonra, mevcut tüm dizinlere yeni dosyaların aynı ACL'ye sahip olması gerektiğini söyleyin (ikinci satır).

Umarım bu seni yoluna çıkarır.

193
womble

depoyu oluşturduysanız (veya mevcut bir depodan yeni bir çıplak repo kopyaladıysanız)

$ git init --shared=group 

veya

$ git init --shared=0NNN

Git'in varsayılan umask'nizin sağladığı izinlerin ötesinde izinleri işlemesi gerekiyor. Sonunda bu Git (1.6.3) sürümüm için geçerlidir. Elbette bu, kullanıcılarınızın aynı grupta olduğunu varsayar.

Bununla birlikte, farklı okuma/yazma derecelerine sahip birden fazla gruptaki kullanıcıların yönetimine ihtiyacım olsaydı, gitozla giderdim. Ayrıca, şube düzeyinde izinler sağlaması beklenen gitoz çatalı olan gitolitin ( http://github.com/sitaramc/gitolite ) bahsettiğini duydum, her birini kullandığımı söyleyemem kişisel olsa.

122
user35117

Bu söylenmedi, bu yüzden hızlı bir şekilde eklemek istiyorum.

İzin sorunlarının çirkin başlarını kırpmamasını sağlamak için git paylaşılan deponuzun yapılandırma dosyasında aşağıdakileri ayarladığınızdan emin olun:

[core]
    sharedRepository = true

Bu, sisteminizin "umask" ayarlarına uyulmasını sağlar.

55
Niels Joubert

Git Kullanım Kılavuz , bir havuzun nasıl paylaşılacağı çeşitli şekillerde nasıl açıklanacağını açıklar.

Daha karmaşık olsa da, depoları paylaşmanın tam özellikli yolları şunlardır:

GitHub'ı 6 geliştiriciden oluşan bir ekip için kullanıyoruz.

22
jtimberman

Ayrıca git deponuzu barındırmak için gitolite adresine bakın. Gitosis artık geliştirilmiyor.

9
mt3

Paylaşılan depodaki izinleri düzeltmenin bir yolu, böylece kullanıcılar iterken izin sorunları yaşamaz, sadece bunu yapacak bir güncelleme sonrası kanca komut dosyası oluşturmaktır. Bu, herhangi bir git sürümünde çalışmalıdır.

/Myrepo.git'te paylaşılan bir havuzunuz olduğunu varsayalım. Bu depodaki tüm dosyalar mysharedgroup'a aittir. Bu depoya iten tüm kullanıcılar da mysharedgroup'a ait olmalıdır. Şimdi aşağıdaki dosyayı oluşturun ( mysharedgroup tercihlerinize göre değiştirin):

/myrepo.git/kanca/sonrası güncelleme

#!/bin/sh
chmod -R g+w . 2>/dev/null
chgrp -R mysharedgroup . 2>/dev/null
4
bkmks

Yeni bir repo oluşturma hakkındaki diğer çeşitli cevaplardan ve yorumlardan bazı iyi parçaları ve önerileri bir araya getirmek için:

myrepo grubu için /srv/git İçinde yepyeni bir _ mygroup repo ayarlıyorsanız, istediğiniz şey budur:

mkdir /srv/git/myrepo.git
chgrp mygroup /srv/git/myrepo.git
git init --bare --shared /srv/git/myrepo.git
  1. ilk satır repo dizinini oluşturur
  2. ikinci satır grubunu mygroup olarak ayarlar
  3. üçüncü satır, aşağıdaki yapılandırmayla çıplak bir repo başlatır:
    1. core.bare = true: Çıplak bir repo yap
    2. core.sharedrepository = 1 (core.sharedrepository = group İle aynı): repo dizini ve daha sonra içinde oluşturulan tüm dizinler, mygroup okuma, yazma ve yürütme izinlerine ( sgid biti de ayarlandı - mygroup birincil grupları olmayan kullanıcılarla çalışmak için)
    3. receive.denyNonFastforwards = 1: Repoya hızlı ilerlemeyen itmeleri reddet

Kullanıcı, grup veya diğer kullanıcıların izinlerine ince ayar yapmak istiyorsanız, --shared=0NNN Kullanın; burada NNN, standart kullanıcı, grup ve diğer bitlerdir dosyalar ( dizinlerindeki yürütme ve sgid bitleri git tarafından uygun şekilde yönetilecektir). Örneğin, bu, kullanıcıya okuma ve yazma erişimine ve gruba salt okuma erişimine izin verir (ve diğerlerine erişim yok):

git init --bare --shared=0640 /srv/git/myrepo.git

Bu, kullanıcıya ve gruba okuma ve yazma erişimine izin verir (ve diğerlerine erişim yok):

git init --bare --shared=0660 /srv/git/myrepo.git

Bu, kullanıcıya ve gruba okuma ve yazma erişimi ile diğerlerine salt okuma erişimi sağlar:

git init --bare --shared=0664 /srv/git/myrepo.git

Gruba yazma erişimine izin vermeyecekseniz, önce repo sahibini ayarlamak için chown kullandığınızdan emin olun ve ardından git init Komutunu bu kullanıcı olarak çalıştırın ( repo'nun tüm ilk dosyalar ve alt dizinler için doğru sahiple başlatıldığından emin olun).

3
Justin Ludwig

Depoyu paylaşmak için git-daemon kullanabilirsiniz. Daha fazla bilgi için git-daemon belgelerini okuyun.

DÜZENLE:

Ayrıca bu makaleyi kontrol edin git deponuzu paylaşmanın 8 yol .

2
Vihang D

Tam olarak bunu yapmak benim için var olan bir depoda işe yaradı. Bu, daha önce birkaç cevap ve yorumdan tavsiye alır:

Havuz üst dizininizden, sunucuda:

chgrp -R <whatever group> gitrepo
chmod -R g+wX gitrepo
cd gitrepo
find . -type d -exec chmod g+s {} +
git config core.sharedRepository group
1
Luis de Arquer

@stevek_mcc cevap bu soru için googled zaman aradığım cevap

git clone --config core.sharedRepository=true
0
ragerdl