Gitmek için bir .sh dosyası istiyorum, ancak aynı dosyayı başka bir sunucuda kullanıma aldığımda yürütülebilir olmasını istiyorum.
El ile chmod u + x dosyayı teslim sunucularda bu dosya olmadan yapmanın bir yolu var mı?
Gitmek için bir .sh dosyası istiyorum, ancak aynı dosyayı başka bir sunucuda kullanıma aldığımda yürütülebilir olmasını istiyorum.
El ile chmod u + x dosyayı teslim sunucularda bu dosya olmadan yapmanın bir yolu var mı?
Yanıtlar:
Resmi belgelere göre , update-indexalt komutu kullanarak herhangi bir izlenen dosyada "yürütülebilir" bayrağını ayarlayabilir veya kaldırabilirsiniz .
Bayrağı ayarlamak için aşağıdaki komutu kullanın:
git update-index --chmod=+x path/to/file
Kaldırmak için şunu kullanın:
git update-index --chmod=-x path/to/file
Kaputun altında
Bu normal unix dosyaları izin sistemi gibi görünse de, aslında öyle değil. Git, dahili depolama alanındaki her dosya için özel bir "mod" tutar:
100644 normal dosyalar için100755 yürütülebilir olanlar içinSeçenekle ls-filebirlikte alt komutu kullanarak görselleştirebilirsiniz --stage:
$ git ls-files --stage
100644 aee89ef43dc3b0ec6a7c6228f742377692b50484 0 .gitignore
100755 0ac339497485f7cc80d988561807906b2fd56172 0 my_executable_script.sh
Varsayılan olarak, bir depoya dosya eklediğinizde Git, dosya sistemi özniteliklerine uymaya ve buna göre doğru dosya modunu ayarlamaya çalışır. core.fileModeSeçeneği false olarak ayarlayarak bunu devre dışı bırakabilirsiniz :
git config core.fileMode false
Sorun giderme
Bir noktada Git dosya modu ayarlanmamış ancak dosyada doğru dosya sistemi bayrağı varsa, modu kaldırmayı ve yeniden ayarlamayı deneyin:
git update-index --chmod=-x path/to/file
git update-index --chmod=+x path/to/file
Bonus
Git 2.9 ile başlayarak bir dosyayı yerleştirebilir ve bayrağı tek bir komutta ayarlayabilirsiniz:
git add --chmod=+x path/to/file
Antwane'nin cevabı doğrudur ve bu bir yorum olmalıdır, ancak yorumların yeterli alanı yoktur ve biçimlendirmeye izin vermez. :-) Sadece Git'e eklemek istiyorum, dosya izinleri sadece 1 olarak kaydedildi 644veya 755(yazıldığından ( 100644ve 100755; 100bölüm "normal dosya" anlamına gelir):
diff --git a/path b/path
new file mode 100644
Birincisi — 644 — dosyanın yürütülebilir olmaması ve ikincisi yürütülebilir olması gerektiği anlamına gelir . Bunun dosya sisteminizdeki gerçek dosya modlarına nasıl dönüştüğü biraz işletim sistemine bağlıdır. Unix benzeri sistemlerde, bitler umasknormalde 022"grup" ve "diğer" 002den yazma iznini kaldırmak veya yalnızca "diğer" den yazma iznini kaldırmak olan ayarınızdan geçirilir . 077Özellikle gizlilik konusunda endişeleriniz varsa ve hem "grup" hem de "diğer" öğelerinden okuma, yazma ve yürütme iznini kaldırmak istiyorsanız da olabilir .
1 Git'in son derece erken sürümleri grup izinlerini kaydetti, böylece bazı depolarda modlu ağaç girişleri var 664. Modern Git değişmez, ancak hiçbir nesnenin hiçbir kısmı değiştirilemediğinden, bu eski izin bitleri eski ağaç nesnelerinde hala kalır.
Değişiklik sadece 0644 veya 0755 yılında taahhüt edilmiş saklamak için e44794706eeb57f2 Git v0.99 ve tarihli 16 Nisan 2005 tarihinden önce olduğunu.
e44794706eeb57f2ee38ed1604821aa38b8ad9d2, yani Git sürüm 0.99'dan önce.