Git'in çekme sırasında izinlerini ve sahipliğini değiştirmesini önlemenin bir yolu var mı?


11

Yapmam Her zaman git pullya git reset, gitsıfırlar yaptığım izinler ve mülkiyete değiştirir. Kendin için gör:

#!/usr/bin/env bash
rm -rf 1 2

mkdir 1
cd 1
git init
echo 1 > 1 && git add 1 && git ci -m 1

git clone . ../2
cd $_
chmod 0640 1
chgrp http 1

cd ../1
echo 12 > 1 && git ci -am 2

cd ../2
stat 1
git pull
stat 1

Çıktı:

$ ./1.sh 2>/dev/null | grep -F 'Access: ('
Access: (0640/-rw-r-----)  Uid: ( 1000/    yuri)   Gid: (   33/    http)
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    yuri)   Gid: ( 1000/    yuri)

Etrafında çalışmanın bir yolu var mı?

Bazı dosyaları / dizinleri web sunucusu tarafından yazmak için erişilebilir yapmak istiyorum.

Yanıtlar:


4

Bu, çalıştırdığınız kullanıcının varsayılan grubu olarak ayarlanmış gibi görünüyor yuri. Bunu şu şekilde onaylayabilirsiniz:

$ id -a
uid=1000(saml) gid=1000(saml) groups=1000(saml),10(wheel),989(wireshark)

Hesabınızın UID'si şudur: uid=1000(saml)oysa varsayılan grup git=1000(saml)ve ikincil gruplar daha sonradır.

NOT: git klonunun belirli bir sahipliğe sahip olmasını istiyorsanız, en az 2 seçeneğiniz vardır.

Seçenek 1

İzinleri istediğiniz şekilde bir üst dizin ayarlayın:

$ mkdir topdir
$ chgrp http topdir
$ chmod g+s topdir

$ cd topdir
$ git clone ....

Bu, dizini topdiraltındaki tüm alt dizinleri grubun httpuygulanmasını zorunlu kılmaya zorladı . Bu büyük ölçüde işe yarayacak, ancak sorunlara yol açabilir, çünkü dosyaları bu git klon çalışma alanına taşırsanız, bu dosyalar gruplarında yukarıda yapılan değişikliklerle zorlanmaz.

Seçenek 2

İş yapmadan önce varsayılan grubunuzu aşağıdaki httpgibi değiştirin :

$ newgrp http
$ git clone ...

Bu yöntem, oluşturulan yeni dosyaların gruplarını httpvarsayılan varsayılan grubunuz yerine ayarlamaya zorlar yuri, ancak bu yalnızca newgrpbu çalışma alanında çalışmadan önce yapmayı hatırladığınız sürece çalışır .

Diğer seçenekler

Bunların hiçbiri kabul edilebilir görünmüyorsa, git çalışma alanı dizininde bunun yerine ACL'leri kullanmayı deneyebilirsiniz. Bunlar, bu sitede şu soru-cevap bölümünde olduğu gibi bu sitedeki birden çok Soru ve Cevap bölümünde tartışılmıştır: Linux'ta grup izinlerini devralmak için yeni dosyalar alma .


İlk olarak, anlam olmalısın newgrp. Peki, sadece geçerli kabuk için grup değiştiriyor mu? Ve son olarak, amaç sadece belirli dosyaları / dizinleri web sunucusu tarafından yazmak için erişilebilir kılmaktı. Sonuçta, muhtemelen bunları manuel olarak düzeltmeliyim veya bir gitkanca ayarlamalıyım ...
x-yuri

@ x-yuri - evet üzgünüm burada 05:00 ve 8- yatağa gitmek üzereyim. Evet, bu sadece mevcut kabuk için devam ediyor, bu yüzden bu yaklaşımın bir dezavantajı olurdu. Web sunucusu için yalnızca belirli bir erişim istiyorsanız, bu zor olacaktır ve muhtemelen ACL'leri kullanmak isteyeceksiniz. Ayrıca, bu ayrıntıları Q'nuza eklemek isteyebilirsiniz. Olduğu gibi, amaçladığınız amacın ne olduğu belirsizdir, bu yüzden size sadece spesifik olmayan terimlerle cevap verebilirim.
slm

1
@ x-yuri - bunun gibi bir güncelleme güncellemesi kancası daha uygun olabilir: stackoverflow.com/questions/9613545/…
slm

1
@ x-yuri - kontrol izinleri git kitabında çengeller altında tartışılmıştır: git-scm.com/book/en/Customizing-Git-Git-Hooks
slm

Aslında sadece mevcut kabuk için grup değiştirmenin dürüst olmak gerekirse, nasıl bir dezavantaj olabileceğini görmüyorum. Diğer uygulamaların çalışma şeklini değiştirmemesinden endişeliydim.
x-yuri

2

Kullandığım çözüm , tutmak istediğiniz izinlere sahip kullanıcı olarak komutu çalıştırmaktır :

sudo -u user command

Bu izinlerin değişmesini önler. Dosya izinlerini web sunucusu kullanıcısına ayarlı tutarken git depolarını VPS'imde güncellerken kullanıyorum.

Aynı soruya bakın burada .

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.