สิทธิ์การใช้ไฟล์ Git บน Windows


172

ฉันได้อ่านคำถามสองสามข้อเกี่ยวกับการอนุญาตไฟล์ใน Git และฉันก็ยังสับสนอยู่ ฉันได้รับ repo จาก GitHub มาจากที่อื่น โพสต์ผสานพวกเขาควรจะเหมือนกัน อย่างไรก็ตาม:

$ 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

ฉันได้ลองเปลี่ยนการอนุญาตไฟล์ แต่มันไม่ได้เปลี่ยนผลต่าง

คำตอบ:


346

ฉันพบวิธีแก้ไขสิทธิ์ (บน) บน Windows ที่นี่: http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html

ตัวอย่างเช่นคำสั่งต่อไปนี้จะเพิ่มการอนุญาตให้ผู้ใช้เรียกใช้งานไปยังไฟล์ที่กำหนดเอง:

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

6
+1: สิ่งที่ฉันต้องการเพื่อให้แน่ใจว่าเชลล์สคริปต์ที่ฉันส่งจาก Windows (ที่ฉันcore.filemodeตั้งไว้false) จริง ๆ แล้วมีบิตรันไทม์
tomlogic

ในกรณีของฉันฉันยังเพิ่มบรรทัดใหม่ไปยังไฟล์และจากนั้นก็สามารถที่จะกระทำ
oshai

5
ใน Windows โดยใช้ git-bash ฉันต้องการ--addตั้งค่าสถานะเพื่อดำเนินการด้วยเหตุผลบางประการ: git update-index --add --chmod=+x <file>. หลังจากนี้ไฟล์ดังกล่าวอยู่ในขั้นตอนของ chmod แล้ว
Jefferson Quesado

ไม่มีผลกระทบอีกต่อไปทั้งในคอมไพล์ bash และใน cmd.exe
Ben

107

จากคำถามอื่นที่นี่ใน stackoverflow: ฉันจะทำให้ Git เพิกเฉยโหมดไฟล์ (chmod) ได้อย่างไร?

ลอง:

git config core.filemode false

จากgit-config (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.

ขอบคุณ ฉันก็เห็นเช่นกัน พยายามและมันก็ไม่ได้ทำให้แตกต่าง
Synesso

3
ฉันมีปัญหาคล้ายกับ OP และไม่สามารถดึงการเปลี่ยนแปลงไม่ว่าhardฉันจะพยายามรีเซ็ต นี้ได้เคล็ดลับสำหรับฉัน.
Jo-Herman Haugholt

11
[โครงการ] /. git / config อาจมีการตั้งค่าเดียวกันและจะแทนที่ ~ / .gitconfig หากคุณกำลังพยายามตั้งค่าทั่วโลกตรวจสอบให้แน่ใจว่าไม่ได้ถูกแทนที่ภายในเครื่อง
Bile Phile

1
ฉันคิดว่านี่เป็นสิ่งจำเป็นสำหรับ NTFS เช่นกันเศร้า
Marc.2377

1
นั่นคือคำตอบ!
Andrew Surdu

29

มีประโยชน์หนึ่งซับสำหรับ Git Bash:

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

มันจะทำเครื่องหมาย.shไฟล์ทั้งหมดว่าปฏิบัติการได้ git commitหลังจากนั้นคุณก็ต้อง


2
การแก้ไขเล็กน้อยสำหรับ @ benoit-blanchon one-liner ... .sh ต้องถูกยกมา หา -name ' .sh' | xargs git update-index --chmod = + x
สตีเวน the

ถูกต้องฉันแก้ไขคำตอบ ขอบคุณ @SteventheEasilyAmused
เบอนัวต์บลอนช์

15

หากคุณใช้ Cygwin git (หรือ Linux git เช่นกันฉันถือว่า) มีโอกาสที่ดีที่การตั้งค่า core.filemode ของคุณได้รับการตั้งค่าที่ระดับโครงการใน $ projdir / .git / config ฉันพบว่าฉันต้องทำสิ่งต่อไปนี้เพื่อให้ได้ Cygwin git และ Windows git ของฉันเพื่ออยู่ร่วมกันบนระบบไฟล์ Windows โดยไม่มีการเปลี่ยนแปลงโหมดไฟล์ที่ไม่มีอยู่แสดงขึ้นตลอดเวลา:

  • ลบการตั้งค่าบรรทัด core.filemode ใน $ projdir / .git / config
  • ใน Windows git ให้เรียกใช้ "git config - global core.filemode false"

วิธีนี้ทำให้ Cygwin git ของฉันยังคงเห็นการเปลี่ยนแปลงโหมดไฟล์ซึ่งโดยปกติจะเกี่ยวข้องในขณะที่สั่งให้คอมไพล์ของ Windows ละเว้นการเปลี่ยนแปลงโหมดไฟล์ที่เห็นซึ่งมักเป็นผลบวก


6

ตรวจสอบสิทธิ์ของไฟล์ก่อนโดยใช้คำสั่งด้านล่าง

git ls-files --stage

จากนั้นเปลี่ยนการอนุญาต ที่นี่ "x" หมายถึงสิทธิ์ในการดำเนินการ

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

ตอนนี้ตรวจสอบสิทธิ์อีกครั้ง

git ls-files - เวที

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

ถ้าคุณใช้ Windows PC แต่ปรับใช้กับเครื่อง linux ดำเนินการคำสั่งด้านล่างในสถานที่แรกเพื่อให้เข้ากันได้กับการทำงานบนเครื่อง linux

dos2unix scriptname.ext scriptname.ext


ไม่มีทางที่จะทำอะไรแบบนี้git update-index --chmod=1777 'scriptname.ext'เหรอ?
อเล็กซ์บาร์เกอร์

คุณไปที่เส้นทางที่ไฟล์สคริปต์อยู่หรือไม่ alex @
Sireesh Yarlagadda

5

ฉันแก้ไขมันโดยการเปลี่ยนการอนุญาตไฟล์ใน Ubuntu, กระทำ, ผลักดันและตกลงทั้งหมด ดูเหมือนว่ามันจะไม่ทำงานกับ msysgit บน Windows / NTFS


ฉันขอแนะนำ GitHub สำหรับ windows อินเทอร์เฟซ Wonderfull และเชลล์ที่ดีจริงๆฉันยังทำการติดตั้งคีย์ ssh ได้อย่างง่ายดายและติดตั้ง git flow
Sangoku
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.