W systemach Ubuntu i Debian ostatnio zatwierdzone pliki są ustawiane pod kątem bitów wykonania, gdy próbuję później dokonać płatności. To dość dziwne i doprowadza mnie do szału:
$ 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
Czy ktoś ma pomysł, kiedy i dlaczego kawałek wykonania się wślizguje? core.filemode
jest ustawiony na true
.
Mam plik otwarty w vimie podczas zmiany gałęzi, jeśli to w jakiś sposób ważne.
Dodatek 1: Jest to kasa, w której uprawnienia są pomieszane. Mogę grać w tę grę przez cały czas:
$ 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.
Dodatek 2: Nawiasem mówiąc, dzieje się tak dla każdego pliku w tym repozytorium, który zatwierdzam. Po udanym zatwierdzeniu nie mogę zmienić gałęzi bez zepsutego pozwolenia.
git-log
nie wykazuje wyjście w ogóle, ani dla kombinacji master
, dev-branch
albo HEAD
(? co jest dziwne, prawda nie powinna polecenie wydrukowania ostatni commit wiadomość z master
?)