Windows'ta Git dosya izinleri


172

Git'teki dosya izinleriyle ilgili birkaç soruyu okudum ve hala biraz kafam karıştı. GitHub'da bir diğerinden çatallanmış bir repo var. Birleştirme sonrası, aynı olmalıdır. Ancak:

$ git diff --summary origin/epsilon master/epsilon
 mode change 100644 => 100755 ants/dist/sample_bots/csharp/compile.sh
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/MyBot.coffee
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/ants.coffee
 mode change 100644 => 100755 ants/util/block_test.sh
 mode change 100644 => 100755 manager/mass_skill_update.py
 mode change 100644 => 100755 worker/jailguard.py
 mode change 100644 => 100755 worker/release_stale_jails.py
 mode change 100644 => 100755 worker/start_worker.sh

Dosya izinlerini değiştirmeyi denedim, ancak fark sonuçlarını değiştirmiyor.

Yanıtlar:


346

Windows'da izinleri (ayrıca) nasıl değiştireceğinizin çözümünü burada buldum: http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html

Örneğin aşağıdaki komut, rasgele bir dosyaya kullanıcı yürütme izni ekler:

git update-index --chmod=+x <file>

6
1: Emin (Ben var Windows'tan işlemek kabuk komut dosyalarını yapmak için gereken tam olarak ne core.filemodeayarlı falseaslında yürütmek biti ayarlanmamış).
tomlogic

Benim durumumda da dosyaya yeni bir satır ekledim ve ancak o zaman taahhüt edebildim
oshai

5
Windows'ta, git-bash kullanarak, bir ihtiyaç --addnedense yürütme bayrağı: git update-index --add --chmod=+x <file>. Bundan sonra, dosya zaten chmod ile sahne aldı
Jefferson Quesado

Ne git bash ne de cmd.exe komut isteminde artık bir etkisi yoktur.
Ben

107

Stackoverflow ile ilgili başka bir sorudan: Git'in dosya modu (chmod) değişikliklerini yoksaymasını nasıl sağlayabilirim?

Deneyin:

git config core.filemode false

Kaynaktan git-yapılandırma (1) :

   core.fileMode
       If false, the executable bit differences between the index and the
       working copy are ignored; useful on broken filesystems like FAT.
       See git-update-index(1). True by default.

Teşekkürler. Ben de gördüm. Denedim ve hiçbir fark yaratmadı.
Synesso

3
OP ile benzer sorunlar yaşadım ve nasıl hardsıfırlamaya çalışsam da değişiklikleri yapamadım . Bu benim için hile yaptı.
Jo-Herman Haugholt

11
[project] /. git / config aynı ayarı içerebilir ve ~ / .gitconfig öğesini geçersiz kılar. Global olarak ayarlamaya çalışıyorsanız, yerel olarak geçersiz kılınmadığından emin olun.
İkili Phile

1
Maalesef bunun NTFS'de de gerekli olduğunu düşünüyorum.
Marc.2377

1
Cevap bu!
Andrew Surdu

29

Git Bash için kullanışlı tek astar:

find . -name '*.sh' | xargs git update-index --chmod=+x

Tüm .shdosyayı yürütülebilir olarak işaretler . Bundan sonra, sadece yapmalısınız git commit.


2
@ Benoit-blanchon tek astar için küçük düzeltme ... .sh alıntılanmalıdır. bulmak. -adı ' .sh' | xargs git update-index --chmod = + x
Kolayca Eğlendirilen Steven

Haklısın, cevabı düzenledim. Teşekkürler @SteventheEasilyAmused.
Benoit Blanchon

15

Cygwin git (ya da Linux git de) kullanıyorsanız, core.filemode ayarınızın $ projdir / .git / config olarak proje düzeyinde ayarlanmış olması ihtimali yüksektir. Cygwin git ve Windows git'imi, her zaman görünmeyen filemode değişiklikleri olmadan bir Windows dosya sisteminde güzel bir şekilde bir arada var etmek için aşağıdakileri yapmak zorunda olduğumu buldum:

  • $ projdir / .git / config dizinindeki core.filemode satır ayarını silin
  • Windows git'te "git config --global core.filemode false" komutunu çalıştırın

Bu, Cygwin git'in genellikle ilgili olan filemode değişikliklerini görmeye devam etmesini sağlarken, Windows git'e genellikle yanlış pozitif olan gördüğü filemode değişikliklerini yok saymasını bildirir.


6

Önce aşağıdaki komutu kullanarak dosya izinlerini kontrol edin.

git ls-files --stage

Ardından izinleri değiştirin. Burada "x" yürütme izinlerini temsil eder.

git update-index --chmod=+x 'scriptname.ext'

Şimdi izinleri yeniden doğrulayın.

git ls-files --stage

==============================================

Windows PC kullanıyorsanız, ancak linux makinede konuşlandırıyorsanız. Linux makinesinde çalışmasını sağlamak için aşağıdaki komutu ilk etapta yürütün

dos2unix scriptname.ext scriptname.ext


Gibi bir şey yapmanın bir yolu yok git update-index --chmod=1777 'scriptname.ext'mu?
Alex Barker

Senaryo dosyasının bulunduğu yola gittiniz mi? @alex
Sireesh Yarlagadda

5

Ubuntu'daki dosya izinlerini değiştirerek düzelttim, taahhütte bulun, zorla ve tamam. Windows / NTFS'de msysgit ile çalışmaz gibi görünüyor.


Windows için GitHub'ı tavsiye ederim. Wonderfull arayüzü ve gerçekten güzel kabuk, hatta göreceli olarak kolay ssh anahtar kurulumu ve git flow install yaptım.
Sangoku
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.