Trong Ubuntu và Debian, các tệp đã cam kết cuối cùng sẽ được thiết lập bit thực thi, khi tôi thử kiểm tra sau đó. Nó khá lạ và khiến tôi phát điên:
$ 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
Có ai có ý tưởng, khi nào và tại sao bit thực thi trượt vào? core.filemode
được đặt thành true
.
Tôi có tệp mở trong vim trong khi chuyển nhánh, nếu điều đó quan trọng bằng cách nào đó.
Phụ lục 1: Đó là phần thanh toán, trong đó các quyền được vặn lên. Tôi có thể chơi trò chơi trên và trên:
$ 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.
Phụ lục 2: Nhân tiện, điều này xảy ra đối với mọi tệp trong kho lưu trữ này mà tôi cam kết. Sau khi cam kết thành công, tôi không thể chuyển đổi chi nhánh mà không có sự cho phép.
git-log
chương trình không có đầu ra ở tất cả, cho cả sự kết hợp của master
, dev-branch
hoặc HEAD
(? đó là lạ, phải không không nên lệnh in cam kết cuối cùng thông điệp từ master
?)