En Ubuntu y Debian, los últimos archivos comprometidos obtienen el bit de ejecución establecido, cuando intento realizar el pago después. Es bastante extraño y me vuelve loco:
$ 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
¿Alguien tiene una idea, cuándo y por qué se desliza el bit de ejecución? core.filemode
está ajustado a true
.
Tengo el archivo abierto en vim durante el cambio de rama, si eso es importante de alguna manera.
Anexo 1: Es el proceso de pago, donde se arruinan los permisos. Puedo jugar el juego una y otra vez:
$ 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.
Anexo 2: Esto sucede, por cierto, para cada archivo en este repositorio, que confirmo. Después de la confirmación exitosa, no puedo cambiar las ramas sin el permiso de arruinar.
git-log
no muestra ningún resultado, para ninguna combinación de master
, dev-branch
o HEAD
(lo cual es extraño, ¿no? ¿No debería el comando imprimir el último mensaje de confirmación master
?)