Git не игнорирует изменения режима файла (chmod), почему?

Прежде чем начать, я должен сказать, что я уже смотрел этот пост и этот, но по какой-то причине предлагаемые там решения не работают для меня. Мой репозиторий находится под ~/sources, поэтому каждая команда запускается с этого пути. Это то, что я сделал:

Измените файл файл на false:

$ git config --global core.filemode false

Проверить глобальную конфигурацию:

$ git config --list
...
core.filemode=false
core.repositoryformatversion=0
core.bare=false
core.logallrefupdates=true
...

Повторно инициализировать репозиторий:

$ git init
Reinitialized existing Git repository in /home/rperez/sources/.git/

Проверьте, что нужно добавить:

$ git status

И я получаю список, содержащий все файлы из репозитория.

Я использую:

$ git --version
git version 2.9.3

UPDATE: добавлен git diff для двух разных файлов

$ git status
...
    modified:   testing/test-valid-swasset-update.php
...
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    library/mpdf60/ttfontdata/dejavusanscondensedI.GDEFdata.php
...

git diff вывод из файлов выше:

$ git diff testing/test-valid-swasset-update.php
diff --git a/testing/test-valid-swasset-update.php b/testing/test-valid-swasset-update.php
old mode 100755
new mode 100644

Что мне здесь не хватает?

Ответ 1

Локальная конфигурация отменяет настройки глобальной конфигурации

Выходной сигнал diff в вопросе указывает, что локальная конфигурация git имеет filemode, установленную в true. Вероятно, это ожидаемое поведение, поскольку конфигурация по умолчанию, созданная для репо, определяет это:

-> git init
Initialized empty Git repository in /tmp/foo/.git/
-> cat .git/config 
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true

Изменение глобальной конфигурации для filemode не влияет на это, и на самом деле git config --global core.filemode false ничего не делает, потому что это всегда переопределяется локально.

Поэтому, чтобы изменить файл-образ для этого репо, измените локальную конфигурацию:

$ git config core.filemode false
$ git config core.filemode
false

Учитывая этот вопрос/ответ, есть вероятность, что он должен работать, хотя это не для меня.

Ответ 2

Вы можете проверить, что такое локальная настройка: git config --local --list

... и установите локальное значение следующим образом:

git config --local core.filemode false