Является ли "git checkout --patch" несовместимым с autocrlf = true? - PullRequest
0 голосов
/ 14 января 2019

На моем компьютере с Windows я рассматриваю установку autocrlf = true в моем .gitconfig. Другие в моей команде настроили это так, и в итоге мы получили смесь lf & crlf в репо. Я рассмотрел несколько вариантов, и это похоже на путь наименьшего сопротивления ...

Одна вещь, которую я заметил, это то, что git checkout -p завершается ошибкой patch does not apply, когда autocrlf = true. Если я верну значение false, оно будет работать, как и ожидалось.

Является ли autcrlf = true несовместимым с checkout --patch или мне нужно установить какой-то другой параметр, чтобы он работал?

Интересно, что git add --patch работает как ожидалось с autocrlf = true.

1 Ответ

0 голосов
/ 14 января 2019

Да , git checkout --patch правильно работает с переводом конца строки. Патч почти наверняка не применяется, потому что у вас неправильная конфигурация.

Все в вашей команде должны использовать одинаковую конфигурацию окончания строки. core.autocrlf=true не вариант, который может включить один человек в команде; всем нужны одинаковые настройки. Это потому, что если у вас core.autocrlf=false, вы говорите Git, что содержимое на диске идентично содержимому в хранилище. Если вы работаете в Windows, это означает, что вы проверяете файлы с окончаниями строк в стиле Windows (\r\n). Если у вас есть коллега, который разрешает core.autocrlf=true, то вы говорите Git, что содержимое на диске имеет конец строки в стиле Windows, а содержимое в хранилище имеет конец строки в стиле Unix (\n).

Но ваш коллега сказал git ложь, поскольку в содержимом репозитория на самом деле содержится \r\n.

При несоответствии этих настроек могут происходить различные странные вещи, в том числе такие, как исправления, которые не применяются.

Вместо этого вы должны:

  1. Установите * text=auto в вашем файле .gitattributes. Это гарантирует, что все работающие в репозитории имеют одинаковые настройки, поскольку конфигурация на самом деле отмечена в , а не то, что каждый должен помнить для правильной настройки.

  2. Перенормируйте репозиторий, чтобы содержимое репозитория действительно соответствовало заявленному вами. Вы можете сделать это с помощью git add --renormalize . и проверить содержимое в.

Как только вы это сделаете (и все обновят ваши локальные рабочие папки), ваш git apply --patch должен вести себя правильно.

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