Git diff сообщает новый / старый режим, после config.filemode = false - PullRequest
0 голосов
/ 27 сентября 2019

Я хочу сравнить branch1 и branch2.

  1. git diff branch1 branch2
  2. diff --git a / User.java b / User.java

старый режим 100644

новый режим 100755.

.

.

Я уже установил [git config -добавить core.filemode false].

[~ / .gitconfig -> filemode = false].

Но все равно появляется новый / старый режим .. Как решить эту проблему?

1 Ответ

1 голос
/ 27 сентября 2019

Что касается 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 (с локальной настройкой конфигурации - глобальная не будет работать в качестве хранилищауже есть локальная настройка, начиная с этого начального шага создания), если хотите, но это никогда не повлияет на какой-либо существующий коммит. Никакая часть любого существующего коммита не может быть изменена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...