การอัปเดตและกระทำการอนุญาตเฉพาะไฟล์โดยใช้การควบคุมเวอร์ชัน git


187

เพิ่งเปลี่ยนsome.shไฟล์ให้กลายเป็นไฟล์เรียกทำงาน ( chmod 755 ...) สิทธิการใช้งานได้รับการอัพเดท แต่ไม่ใช่เนื้อหา มีวิธีที่จะกระทำไฟล์ลงในคอมไพล์เพื่อให้บิตปฏิบัติการจะถูกเรียกคืน / ตั้งอยู่บนโคลน / เช็คเอาต์ / ดึง ?

ปรับปรุง:ฉันจะติดตามได้อย่างไรว่ามีการส่งการอนุญาตใหม่ให้githubหรือไม่

คำตอบ:


190

โดยค่าเริ่มต้น git จะอัปเดตการอนุญาตไฟล์หากคุณทำการเปลี่ยนแปลง มันจะไม่เปลี่ยนแปลงหรือติดตามการอนุญาตอื่น ๆ

หากคุณไม่เห็นการเปลี่ยนแปลงใด ๆ เมื่อแก้ไขการอนุญาตให้ใช้สิทธิคุณอาจมีการกำหนดค่าเป็น git ซึ่งไม่สนใจโหมดไฟล์

ดูโครงการของคุณใน.gitโฟลเดอร์สำหรับconfigไฟล์และคุณควรเห็นสิ่งนี้:

[core]
    filemode = false

คุณสามารถเปลี่ยนเป็นtrueตัวแก้ไขข้อความที่คุณชื่นชอบหรือเรียกใช้:

git config core.filemode true

จากนั้นคุณควรจะสามารถส่งไฟล์ได้ตามปกติ มันจะกระทำการเปลี่ยนแปลงการอนุญาตเท่านั้น


ขอบคุณ! ฉันจะติดตามว่ามีการส่งการเปลี่ยนแปลงการอนุญาตให้ได้githubอย่างไร
BreakPhreak

2
คุณสามารถดูได้เมื่อคุณดูไฟล์ (ตัวอย่างเช่นบนไฟล์ Rails gitignoreคุณจะพบ 100644 เป็นไฟล์ที่อนุญาต)
Vincent B.

8
การเปลี่ยนแปลงการอนุญาตบน Windows ด้วย git (จริง ๆ แล้วเปลี่ยนการอนุญาตไฟล์และการคอมมิท): blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html
fooMonster

39
คำตอบนี้ผิด! Git ติดตามเฉพาะเมื่อไฟล์สามารถเรียกใช้งานได้หรือไม่ มันไม่ได้ติดตามการอนุญาตไฟล์อื่น ๆ เช่นเขียนได้หรืออ่านได้ อ่านstackoverflow.com/a/11231682/2311074สำหรับข้อมูลเพิ่มเติม
อดัม

สำหรับฉัน webstorm ไม่ได้จับการเปลี่ยนแปลง แต่ในgit statusฉันเห็นการเปลี่ยนแปลง ..
Townsheriff

193

@fooMonster บทความใช้งานได้สำหรับฉัน

# git ls-tree HEAD
100644 blob 55c0287d4ef21f15b97eb1f107451b88b479bffe    script.sh

ในขณะที่คุณสามารถดูไฟล์ที่ได้รับอนุญาต 644 (ละเว้น 100) เราต้องการเปลี่ยนเป็น 755:

# git update-index --chmod=+x script.sh

กระทำการเปลี่ยนแปลง

# git commit -m "Changing file permissions"
[master 77b171e] Changing file permissions
0 files changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 script.sh

7
ควรสังเกตว่าคุณต้องใช้ '-x / + x' จริงๆ คุณไม่สามารถตั้งค่าการอนุญาตอื่น ๆ หรือ bitmask
Devolus

การใช้โน้ตgit commit -aไม่ได้ทำอะไรให้ฉันเลย แต่การตั้งค่าข้อความบนบรรทัดคำสั่งทำได้ บิตของการเล่นโวหาร
JonnyRaa

ลำดับคำสั่งควรเป็น: # git update-index --chmod=+x script.sh # git ls-tree HEAD # git commit -m "Changing file permissions" # git push
SimonDepelchin

30

ไม่ทำงานสำหรับฉัน

โหมดนี้เป็นจริงไฟล์ได้รับการเปลี่ยนแปลง แต่ git บอกว่าไม่มีงานที่ต้องทำ

git init
git add dir/file
chmod 440 dir/file
git commit -a

ปัญหาน่าจะเป็นที่คอมไพล์ยอมรับการเปลี่ยนแปลงสิทธิ์บางอย่างเท่านั้น


51
ถูกต้อง - gitติดตามว่าไฟล์นั้นทำงานได้จริงหรือไม่ไม่ใช่ * สิทธิ์แบบเต็ม * ดังนั้นคุณจะต้องสลับไฟล์ระหว่างปฏิบัติการ / ไม่ให้คิดว่าคุณมีการเปลี่ยนแปลงสิ่งที่คุ้มค่ากระทำ ...
twalberg

ฉันไม่พบเอกสารที่ชัดเจน: ฉันสามารถใช้ทริกเกอร์ post-action ใดเพื่อตั้งค่า perms ตามนั้น
Otheus

2
มีpost-checkoutตะขออยู่gitซึ่งจะครอบคลุมบางกรณี แต่ฉันไม่แน่ใจว่าจะครอบคลุมสิ่งที่เป็นไปได้ทั้งหมดที่อัปเดตไฟล์ใน worktree ของคุณหรือไม่ คุณอาจจะดีกว่าแค่มีเชลล์สคริปต์เพิ่มเติมใน repo ของคุณที่กำหนดสิ่งต่าง ๆ ให้สอดคล้องกัน นอกจากนี้ยังมีโครงการที่ทั้งคู่ออกมีที่เพิ่มเติมgitจากข้อมูลเมร้าน แต่ฉันไม่เคยพยายามจริงๆใด ๆ ของพวกเขา ...
twalberg

1
ผมเปลี่ยนสิทธิ์ของแฟ้ม 777 และทำแต่แสดงให้เห็นถึงความแตกต่างgit update-index --refresh old mode 100644 new mode 100755ไม่ได้อัปเดตการอนุญาตทั้งหมด
hudac

ดู @tishma ตอบที่นี่stackoverflow.com/questions/14557106/... นี่คือสิ่งที่ได้ผลสำหรับฉัน
gary69
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.