ภายใต้ Ubuntu และ Debian ไฟล์ที่คอมมิทล่าสุดได้รับชุดบิตเรียกใช้งานเมื่อฉันลองเช็คเอาต์หลังจากนั้น มันค่อนข้างแปลกและขับฉันถั่ว:
$ ls -l file
-rw-r--r-- ... file
# on branch master:
$ git commit -m 'mode is 644' file
[master 0123456] mode is 644
1 files changed, 1 insertions(+), 1 deletions(-)
# All ok
$ git checkout dev-branch
Switched to branch 'dev-branch'
# Seemingly all ok, but file now has the exec bit set
$ git merge master
Updating 6543210..0123456
error: Your local changes to 'file' would be overwritten by merge. Aborting.
Please, commit your changes or stash them before you can merge.
# Oops...
$ ls -l file
-rwxr-xr-x ... file
มีใครมีความคิดบ้างเมื่อใดและเพราะเหตุใดบิตการดำเนินการจึงลื่นไหล มีการตั้งค่าcore.filemode
true
ฉันมีไฟล์ที่เปิดเป็นกลุ่มในระหว่างการสลับสาขาหากเป็นสิ่งสำคัญ
ภาคผนวก 1:นั่นคือการชำระเงินซึ่งจะมีการอนุญาตให้ใช้สิทธิ์มากเกินไป ฉันสามารถเล่นเกมบนและบน:
$ git br
* master
dev-branch
$ git diff
diff --git a/file b/file
old mode 100644
new mode 100755
$ chmod 644 file
$ git diff
$ git checkout dev-branch
$ git diff
diff --git a/file b/file
old mode 100644
new mode 100755
$ chmod 644 file
$ git diff
$ git checkout master
$ git diff
diff --git a/file b/file
old mode 100644
new mode 100755
# ...and so on ad inf.
ภาคผนวก 2:สิ่งนี้เกิดขึ้นตามจริงสำหรับทุก ๆ ไฟล์ในที่เก็บที่ฉันยอมรับ หลังจากความสำเร็จที่ได้รับมอบหมายฉันไม่สามารถสลับสาขาได้หากไม่ได้รับอนุญาต
git-log
แสดงให้เห็นว่าการส่งออกที่ทุกคนสำหรับการรวมกันของค่าmaster
, dev-branch
หรือHEAD
(? ซึ่งเป็นที่แปลกประหลาดไม่ได้ก็ไม่ควรสั่งพิมพ์สุดท้ายกระทำข้อความจากmaster
?)