ฉันต้องการคอมไพล์ยอมรับไฟล์. sh แต่ต้องการให้สามารถเรียกใช้งานได้เมื่อฉันเช็คเอาต์ไฟล์เดียวกันนั้นในเซิร์ฟเวอร์อื่น
มีวิธีการทำเช่นนั้นโดยไม่ต้อง chmod u + x ไฟล์นั้นด้วยตนเองในเซิร์ฟเวอร์ที่เช็คเอาต์ไฟล์หรือไม่?
ฉันต้องการคอมไพล์ยอมรับไฟล์. sh แต่ต้องการให้สามารถเรียกใช้งานได้เมื่อฉันเช็คเอาต์ไฟล์เดียวกันนั้นในเซิร์ฟเวอร์อื่น
มีวิธีการทำเช่นนั้นโดยไม่ต้อง chmod u + x ไฟล์นั้นด้วยตนเองในเซิร์ฟเวอร์ที่เช็คเอาต์ไฟล์หรือไม่?
คำตอบ:
ตามเอกสารอย่างเป็นทางการคุณสามารถตั้งค่าหรือลบการตั้งค่าสถานะ "ปฏิบัติการ" ในไฟล์ที่ถูกติดตามโดยใช้update-indexคำสั่งย่อย
ในการตั้งค่าสถานะใช้คำสั่งต่อไปนี้:
git update-index --chmod=+x path/to/file
หากต้องการลบให้ใช้:
git update-index --chmod=-x path/to/file
ภายใต้ประทุน
ขณะนี้ดูเหมือนว่าระบบอนุญาตไฟล์ยูนิกซ์ทั่วไป แต่จริงๆแล้วไม่ใช่ Git รักษา "โหมด" พิเศษสำหรับแต่ละไฟล์ในที่เก็บข้อมูลภายใน:
100644 สำหรับไฟล์ปกติ100755 สำหรับคนที่ปฏิบัติการได้คุณสามารถเห็นภาพโดยใช้คำls-fileสั่งย่อยพร้อม--stageตัวเลือก:
$ git ls-files --stage
100644 aee89ef43dc3b0ec6a7c6228f742377692b50484 0 .gitignore
100755 0ac339497485f7cc80d988561807906b2fd56172 0 my_executable_script.sh
ตามค่าเริ่มต้นเมื่อคุณเพิ่มไฟล์ลงในที่เก็บ Git จะพยายามให้เกียรติแอตทริบิวต์ของระบบไฟล์และตั้งค่าโหมดไฟล์ที่ถูกต้อง คุณสามารถปิดใช้งานสิ่งนี้ได้โดยตั้งค่าcore.fileModeตัวเลือกเป็นเท็จ:
git config core.fileMode false
การแก้ไขปัญหา
หาก ณ จุดหนึ่งไม่ได้ตั้งค่าโหมดไฟล์ Git แต่ไฟล์มีการตั้งค่าสถานะระบบไฟล์ที่ถูกต้องลองลบโหมดและตั้งค่าอีกครั้ง:
git update-index --chmod=-x path/to/file
git update-index --chmod=+x path/to/file
โบนัส
เริ่มต้นด้วย Git 2.9 คุณสามารถจัดวางไฟล์และตั้งค่าสถานะในคำสั่งเดียว:
git add --chmod=+x path/to/file
คำตอบของ Antwaneนั้นถูกต้องและนี่ควรเป็นความคิดเห็น แต่ความคิดเห็นมีพื้นที่ไม่เพียงพอและไม่อนุญาตการจัดรูปแบบ :-) ฉันแค่ต้องการเพิ่มว่าใน Git การอนุญาตไฟล์จะถูกบันทึกเพียง1เป็นอย่างใดอย่างหนึ่ง644หรือ755(สะกด ( 100644และ100755; 100ส่วนหมายถึง "ไฟล์ปกติ"):
diff --git a/path b/path
new file mode 100644
อดีต —644— หมายความว่าไฟล์ไม่ควรเรียกใช้งานได้และไฟล์หลังหมายความว่าควรเรียกใช้ไฟล์ได้ วิธีที่เปลี่ยนเป็นโหมดไฟล์จริงภายในระบบไฟล์ของคุณนั้นขึ้นอยู่กับระบบปฏิบัติการ บนระบบที่คล้าย Unix บิตจะถูกส่งผ่านumaskการตั้งค่าของคุณซึ่งโดยปกติจะ022เป็นการลบสิทธิ์การเขียนจาก "กลุ่ม" และ "อื่น ๆ " หรือ002เพื่อลบสิทธิ์การเขียนจาก "อื่น ๆ " เท่านั้น อาจเป็นเพราะ077คุณกังวลเกี่ยวกับความเป็นส่วนตัวโดยเฉพาะและต้องการลบการอ่านเขียนและดำเนินการอนุญาตจาก "กลุ่ม" และ "อื่น ๆ "
1รุ่นล่าสุดของ Git บันทึกสิทธิ์ของกลุ่มเพื่อให้ที่เก็บบางรายการมีรายการต้นไม้ที่มีโหมด664อยู่ Modern Git ไม่ได้ แต่เนื่องจากไม่มีส่วนใดของวัตถุใดสามารถเปลี่ยนแปลงบิตสิทธิ์เก่าเหล่านั้นยังคงอยู่ในวัตถุต้นไม้เก่า
การเปลี่ยนแปลงในการจัดเก็บเพียง 0644 หรือ 0755 คือในการกระทำe44794706eeb57f2ซึ่งอยู่ก่อน Git v0.99 และลงวันที่ 16 เมษายน 2005
e44794706eeb57f2ee38ed1604821aa38b8ad9d2มิชชันเช่นการคาดคะเนGit เวอร์ชัน 0.99