Git sürüm denetimini kullanarak yalnızca bir dosyanın izinlerini güncelleme ve taahhüt etme


187

Bir some.shdosyayı bir yürütülebilir dosyaya ( chmod 755 ...) dönüştürdüm , izinler güncellendi, içerik değil. Dosyayı git'e kaydetmenin bir yolu var , böylece yürütülebilir bit klon / checkout / pull üzerinde geri yüklenecek / ayarlanacak mı?

Güncelleme: Yeni izinlerin gönderildiğini nasıl izleyebilirim github?

Yanıtlar:


190

Varsayılan olarak git, değiştirirseniz yürütme dosyası izinlerini güncelleştirir. Diğer izinleri değiştirmez veya izlemez.

Yürütme iznini değiştirirken herhangi bir değişiklik görmüyorsanız, git'te muhtemelen dosya modunu yok sayan bir yapılandırmanız vardır.

Projenize, dosya .gitklasöründe configbakın ve şöyle bir şey görmelisiniz:

[core]
    filemode = false

En truesevdiğiniz metin düzenleyicinizde olarak değiştirebilir veya çalıştırabilirsiniz:

git config core.filemode true

Ardından, dosyalarınızı normal şekilde işleyebilmeniz gerekir. Yalnızca izin değişikliklerini yerine getirecektir.


teşekkür ederim! izin değişikliklerinin gönderildiğini nasıl izleyebilirim github?
BreakPhreak

2
Bir dosyayı görüntülediğinizde görebilirsiniz (örneğin, Rails gitignore dosyasında , dosya izni olarak 100644'ü bulacaksınız)
Vincent B.

8
Git ile Windows'da izin değişiklikleri yapma (aslında dosya izinlerini değiştirme ve işleme koyma
fooMonster

39
Bu cevap yanlış! Git yalnızca bir dosya çalıştırılabilir olup olmadığını izler. Yazılabilir veya okunabilir gibi diğer dosya izinlerini izlemez. Daha fazla bilgi için stackoverflow.com/a/11231682/2311074 adresini okuyun .
Adam

Benim için webstorm değişikliği yakalayamadı, ama git statusdeğişiklikleri görüyorum ..
Townsheriff

193

@fooMonster makalesi benim için çalıştı

# git ls-tree HEAD
100644 blob 55c0287d4ef21f15b97eb1f107451b88b479bffe    script.sh

Gördüğünüz gibi dosyanın 644 izni var (100 yoksayılıyor). Bunu 755 olarak değiştirmek istiyoruz:

# git update-index --chmod=+x script.sh

değişiklikleri yap

# git commit -m "Changing file permissions"
[master 77b171e] Changing file permissions
0 files changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 script.sh

7
Aslında '-x / + x' kullanmanız gerektiğine dikkat edilmelidir. Başka bir izin veya bit maskesi ayarlayamazsınız.
Devolus

not kullanmak git commit -abenim için hiçbir şey yapmadı, ancak komut satırında ileti ayarlamak yaptı. Bit of a
quirk

Komut sırası şöyle olmalıdır: # git update-index --chmod=+x script.sh # git ls-tree HEAD # git commit -m "Changing file permissions" # git push
SimonDepelchin

30

Benim için çalışmıyor.

Mod doğrudur, dosya izinleri değiştirilmiştir, ancak git yapılacak iş olmadığını söylüyor.

git init
git add dir/file
chmod 440 dir/file
git commit -a

Sorun, git'in yalnızca belirli izin değişikliklerini tanıması gibi görünüyor.


51
Doğru - gitgerçekten yalnızca bir dosyanın yürütülebilir olup olmadığını izler, tam * nix izinleri kümesini değil. Yani bir dosyayı çalıştırılabilir / değiştirmeye değer olduğunu düşünmek için çalıştırılabilir / değil arasında geçiş yapmanız gerekir ...
twalberg

Açık olan belgeleri bulamadım: izinleri buna göre ayarlamak için hangi eylem sonrası tetikleyicisini kullanabilirim?
Otheus

2
Peki, bazı vakaları kapsayacak bir post-checkoutkanca var git, ama bunun çalışma ağacınızdaki dosyaları güncelleyen tüm olası şeyleri kapsayacağından emin değilim. Reponuzda işleri buna göre ayarlayan ek bir kabuk betiğine sahip olmanız daha iyi olabilir. Alternatif olarak, gitmeta verileri depolamak için
artırılan

1
Dosya izinlerini 777 olarak değiştirdim ve yaptım git update-index --refresh, ancak fark gösteriyor old mode 100644 new mode 100755. Tüm izinleri güncellemedi
hudac

@tishma cevabını buradan görebilirsiniz stackoverflow.com/questions/14557106/… . Benim için işe
yarayan
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.