2016-12-05 21 views
9

Bir .sh dosyası yüklemeye gitmek istiyorum, ancak aynı dosyayı başka bir sunucuda kontrol ettiğimde yürütülebilir olmasını istiyorum.GIT'de dosyaya chmod izinleri nasıl eklenir?

Dosyayı elinizde bulunduran sunucularda bu dosyayı el ile u + x kullanmadan bir yolu var mı?

cevap

22

Git documentation'a göre, update-index alt komutunu kullanarak, herhangi bir sistemdeki (çalıştırılabilir Windows) herhangi bir izlenen dosyadaki "yürütülebilir" bayrağını ayarlayabilir veya kaldırabilirsiniz.

aslında öyle değil, bu normal unix izin sistemi gibi görünüyorsa

git update-index --chmod=-x path/to/file 

kullanın

git update-index --chmod=+x path/to/file 

kullanmak ve yürütülebilir bayrağını kaldırmak için, yürütülebilir bir dosya belirleyin. Gerçekten, Git yalnızca çalıştırılabilir (x) iznini veya yalnızca izinsiz olarak ayarlanmasına izin vermez. Git 2.9 ile başlayarak

, bir dosyayı sahneye VE tek bir komut kullanarak bayrağı ekleyebilirsiniz: normal dosyalarda 100644, 100755 için: Kapağın altında

git add --chmod=+x path/to/file 

, Git her dosya için özel bir FileMode korumak çalıştırılabilir olanlar. Sen --stage seçeneğiyle, ls-file alt komutunu kullanarak bu modları görselleştirmek:

$ git ls-files --stage 
100644 aee89ef43dc3b0ec6a7c6228f742377692b50484 0  .gitignore 
100755 0ac339497485f7cc80d988561807906b2fd56172 0  my_executable_script.sh 

Varsayılan olarak, Git dosya sistemi özelliklerini onurlandırmak ve buna göre git FileMode ayarlamak çalışacaktır. Sen false core.filemode seçeneği ayarlayarak bunu devre dışı bırakabilirsiniz:

git config core.fileMode false 

diğer bilgiler Git docs bu seçeneği bulunabilir. Eğer Git fileMode ayarlanmamış durumda düştü ama dosya doğru dosya sistemi bayrağı varsa

, modu kaldırmak için denemek ve tekrar ayarlayın:

git update-index --chmod=-x path/to/file 
git update-index --chmod=+x path/to/file 
+0

Bunu test.sh için yaptığımda, git taahhüt ve bas ve başka bir sunucuda checkout yaparken, bu dosyanın izinleri şunlardır: -rw-rw-r-- 1 kullanıcı kullanıcı 12 Ara 5 11:42 sınama. sh –

+0

Testimi sadece bir havuzumda gerçekleştirdim ve beklendiği gibi çalışıyor. Windows altında sağlanan komutu kullanarak izinler dosyada ayarlandı. Sunucumun (Debian) birinde dosya -rw-r-r-- önce izinler vardı, şimdi -rwxr-xr-x olarak ayarlandı. Yerel ve uzak makinelerde hangi git sürümünü kullanıyorsunuz? – Antwane

+0

git yerel sürümde 1.9.5 sürüm ve kasadaki sunucuda git 1.7.1. –

4

Antwane's answer doğru olduğunu ve bu bir yorumdur olmalı ama Yorumlar yeterli alana sahip değildir ve biçimlendirmeye izin vermez. :-) Ben sadece Git'te, dosya izinleri kaydedilmesini eklemek istediğiniz sadece iki 644 veya 755 (yazıldığından (100644 ve 100755 olarak ; 100 parçası "normal dosya") şu anlama gelir:

diff --git a/path b/path 
new file mode 100644 

Eski - 644 - dosya 'un çalıştırılabilir olması gerektiği anlamına gelir ve bu, 'un çalıştırılabilir olması gerektiği anlamına gelir.Bu dosya sisteminizdeki gerçek dosya modlarına dönüşmesi OS'ye bağlıdır. Sistemler, bitlergeçirilirayarı, normalde 022 "yazma" ve "diğer", veya yalnızca "diğer" yazma iznini kaldırmak için 002 yazma izni kaldırmak olacaktır. Özellikle gizlilikle ilgili endişeleriniz varsa ve hem "grup" hem de "öteki" öğelerinden okuma, yazma ve yürütme izni kaldırmak istiyorsanız 077 da olabilir.Bazı depoları onları mod 664 ile ağaç girdilerine sahip olacak şekilde Git ait


Erken versiyonları, grup izinleri kurtardı. Modern Git bunu yapmaz, ancak herhangi bir nesnenin hiçbir parçası değiştirilemediğinden, bu eski izinler bitleri eski ağaç nesnelere hala devam eder.

İlgili konular