Как зафиксировать файлы в git с измененным разделителем строк (получая «нечего коммитить») - PullRequest
0 голосов
/ 27 апреля 2020

Мне нужно обновить некоторые файлы для запроса извлечения, чтобы они имели соответствующие разделители строк для остальной части проекта. Я изменил эти файлы с LF на CRLF в notepad ++ (не мог понять, как это сделать в intellij), сейчас я пытаюсь зафиксировать это изменение - и ничего больше.

Независимо от того, как я пытаюсь зафиксировать изменения и сделать sh изменения - я получаю «нечего зафиксировать». Сначала Intellij, похоже, заметил разницу, поскольку, когда я щелкнул правой кнопкой мыши и зафиксировал репо, он выбрал эти файлы для фиксации - тогда фиксация не удалась с той же ошибкой.

1 Ответ

1 голос
/ 28 апреля 2020

Похоже, что в этом случае вы включили core.autocrlf. Это намеченный и правильный способ работы с Windows, поскольку он сохраняет LF-окончания в вашем хранилище и преобразует их в CRLF, если вы используете Windows. Однако это означает, что Git не рассматривает изменение концов строк как изменение, которое можно зафиксировать, поскольку окончания строк в репозитории в любом случае LF.

Если вы полностью, абсолютно Если вы уверены, что ваша кодовая база не будет никогда использоваться в системе, отличной от Windows, и будет никогда использоваться кем-либо, кто использует подсистему Windows для Linux, тогда вы можете включить этот флаг отключен, и Git не изменит окончание вашей строки, поэтому вы будете хранить CRLF (или, точнее, независимо от того, какие окончания строки вы использовали) в хранилище. Однако, если у вас есть пользователи, использующие macOS, Linux или WSL, вы сделаете их очень недовольными, если сделаете это, и тогда у вас, скорее всего, будут дуэльные войны, заканчивающиеся войнами в вашем хранилище.

Если вместо этого вам нужно, чтобы окончания строк для определенного набора файлов всегда были извлечены с определенной последовательностью (например, у вас есть пакетный файл, а CMD не может работать с окончаниями только для LF), тогда вы добавите запись в ваш .gitattributes файл, который помечает их соответствующим образом:

*.bat eol=crlf

Аналогично, если у вас есть сценарии оболочки, которые всегда должны использовать окончания LF, вы можете написать это:

*.sh eol=lf

Это не предназначен для предпочтений или кроссплатформенной совместимости, но вместо этого, где файл буквально сломан и не может работать, если он имеет неправильные окончания строк. Если проблема заключается только в редакторе (даже в редакторе, который все используют) или в компиляторе, пусть люди используют core.autocrlf для решения проблемы в своих системах.

...