Під 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
.
У мене відкритий файл vim під час перемикання гілки, якщо це якось важливо.
Додаток 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
?)