Windows'ta Git'te dosya yürütme modu izinleri nasıl oluşturulur?


378

Windows'ta Git kullanıyorum ve yürütülebilir kabuk betiğini bir kopya ile git repo'ya göndermek istiyorum.

Genellikle iki adım ( git commit) yapmam gerekir .

$ vi install.sh
$ git add install.sh  
$ git commit -am "add new file for installation" # first commit
[master f2e92da] add support for install.sh
 1 files changed, 18 insertions(+), 3 deletions(-)
 create mode 100644 install.sh
$ git update-index --chmod=+x install.sh
$ git commit -am "update file permission"        # second commit
[master 317ba0c] update file permission
  0 files changed
  mode change 100644 => 100755 install.sh

Bu iki adımı tek bir adımda nasıl birleştirebilirim? git yapılandırma? windows komutu?

Hatırlat : İki cevap iyi, git add --chmod=+x fileyeni git sürümünde destekleniyor

Başvuru: İkinci işlem için Windows'ta Git dosya izinlerindeki soruya bakın


10
Git 2.9.x / 2.10 (2016 3. Çeyrek) git add --chmod=+xile aslında mümkün. Aşağıdaki cevabımı görün , Edward Thomson'a teşekkür edin .
VonC

5
Bu seçilen cevabı güncellenmesi değerinde olacağını git add --chmod=+xsürümü
mikemaccana

Yanıtlar:


590

Bunu iki taahhütte yapmanıza gerek yoktur, dosyayı ekleyebilir ve yürütülebilir dosyayı tek bir taahhütte işaretleyebilirsiniz:

C:\Temp\TestRepo>touch foo.sh

C:\Temp\TestRepo>git add foo.sh

C:\Temp\TestRepo>git ls-files --stage
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       foo.sh

Belirttiğiniz gibi, ekledikten sonra mod 0644'tür (yani yürütülebilir değil). Ancak, taahhütte bulunmadan önce yürütülebilir olarak işaretleyebiliriz:

C:\Temp\TestRepo>git update-index --chmod=+x foo.sh

C:\Temp\TestRepo>git ls-files --stage
100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       foo.sh

Ve şimdi dosya modu 0755 (yürütülebilir).

C:\Temp\TestRepo>git commit -m"Executable!"
[master (root-commit) 1f7a57a] Executable!
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100755 foo.sh

Ve şimdi tek bir yürütülebilir dosya ile tek bir taahhüdümüz var.


147

Gerçekten de, git-addbir --modebayrağım olsaydı iyi olurdu

git 2.9.x / 2.10 (2016 3. Çeyrek) buna izin verecektir ( Edward Thomson sayesinde ):

git add --chmod=+x -- afile
git commit -m"Executable!"

Bu, tüm işlemi daha hızlı yapar ve core.filemodefalse olarak ayarlanmış olsa bile çalışır .

Bkz . Edward Thomson ( ) tarafından taahhüt edilen 4e55ed3 (31 Mayıs 2016 ) . Yardım eden: Johannes Schindelin ( ) . (Tarafından Birleştirilmiş Junio C Hamano - - içinde taahhüt c8b080a , 6 Temmuz 2016)ethomson
dscho
gitster

add: ekle --chmod=+x/ --chmod=-xseçenekler

Yürütülebilir biraz algılanmaz (ve bu nedenle set olmayacak) ile bir depoda yolları için core.filemodekullanıcılar yine diğer kullanıcılarla uyumluluk için yürütülebilir gibi dosyaları eklemek isteyebilirler olsa false olarak ayarlanmış yapmak zorunda core.filemode işlevselliği.
Örneğin, kabuk komut dosyaları ekleyen Windows kullanıcıları, Windows dışındaki kullanıcılarla uyumluluk için bunları yürütülebilir olarak eklemek isteyebilir.

Bu bir sıhhi tesisat komutu ( git update-index --add --chmod=+x foo) ile yapılabilmesine rağmen , git-addkomutun öğretilmesi, kullanıcıların zaten aşina oldukları bir komutla yürütülebilir bir dosya ayarlamasına izin verir .


22

Dosyalarda zaten + x bayrağı ayarlanmışsa, git update-index --chmod=+xhiçbir şey yapmaz ve git, bayrak depoya kaydedilmemiş olsa bile, işlenecek bir şey olmadığını düşünür.

Önce bayrağı kaldırmalı, git komutunu çalıştırmalı, sonra bayrağı geri koymalısınız:

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

Sonra git bir değişiklik görüyor ve değişikliği işlemek için izin verecektir.


9

Öncelikle not, config git dosyasında filemodeayarladığınızdan emin olmanız falseveya şu komutu kullanmanız gerekir:

git config core.filemode false

ve sonra bu komutla 0777 iznini ayarlayabilirsiniz:

git update-index --chmod=+x foo.sh

3

Benim cmd.exe hiçbir touchve chmodkomut var vegit update-index --chmod=+x foo.sh için çalışmıyor.

Sonunda skip-worktreebiraz ayarlayarak çözmek :

git update-index --skip-worktree --chmod=+x foo.sh
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.