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