Sotto Ubuntu e Debian gli ultimi file impegnati stanno ottenendo il bit di esecuzione impostato, quando provo un checkout in seguito. È abbastanza strano e mi fa impazzire:
$ 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
Qualcuno ha un'idea, quando e perché il bit di esecuzione scivola dentro? core.filemode
è impostato su true
.
Ho il file aperto in vim durante il cambio di ramo, se questo è importante in qualche modo.
Addendum 1: è il checkout, in cui le autorizzazioni sono rovinate. Posso giocare all'infinito:
$ 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.
Addendum 2: Questo succede, tra l'altro, per ogni file in questo repository, che commetto. Dopo aver eseguito correttamente il commit, non posso cambiare ramo senza l'autorizzazione sbagliata.
git-log
non mostra alcun output, per nessuna combinazione di master
, dev-branch
o HEAD
(il che è strano, non è vero? Il comando non dovrebbe stampare l'ultimo messaggio di commit da master
?)