Что касается Git, это не проблема.Вы сравниваете два коммитов .Эти коммиты существуют.Ничто в этих двух коммитах никогда не изменится.Это включает в себя тот факт, что в коммите a
, User.java
имеет режим 100644
, а в коммите b
, User.java
имеет режим 100755
.Они останутся такими же навсегда;git diff
сравнит их и обнаружит, что они различаются.
Настройка core.filemode
на false
- это все, что контролирует, как обновляется режим файла в index .Ни индекс, ни рабочее дерево не являются коммитом.Индекс, также называемый промежуточной областью , предоставляет место, в котором вы можете создать следующий коммит.
Вы можете манипулировать любым режимом индексного файла вв любое время, используя git update-index --chmod
.Что бы вы ни установили (100644
или 100755
с -x
или +x
), этот режим будет записан - навсегда! - в следующем коммите, который вы сделаете.Ручное управление режимами файлов, как это раздражает, но всегда возможно.
Ответственность за сохранение и обновление режима файла в вашем рабочем дереве лежит на вашей операционной системе.Если ваша операционная система делает это правильно, вы можете установить core.filemode
на true
и использовать режим операционной системы для управления режимом индексной / промежуточной области.Обычно это рассматривается как более удобный способ управления режимом в будущем коммите.Однако, если ваша операционная система неисправна, вы можете установить для core.filemode
значение false, чтобы Git игнорировал режимы рабочего дерева и использовал только режим, сохраненный в области index / staging.
Когда Git создаетновый репозиторий (с git init
или git clone
, Git исследует поведение операционной системы. Если файловая система рабочего дерева ведет себя правильно, Git устанавливает core.filemode
в true
, чтобы сделать использование Git более удобным. Если ваша работаФайловая система дерева ведет себя некорректно, Git устанавливает core.filemode
на false
, чтобы не выбирать неверные настройки из неверной операционной системы. Вы можете переопределить конфигурацию Git (с локальной настройкой конфигурации - глобальная не будет работать в качестве хранилищауже есть локальная настройка, начиная с этого начального шага создания), если хотите, но это никогда не повлияет на какой-либо существующий коммит. Никакая часть любого существующего коммита не может быть изменена.