Исправление проблем с переводом строки в git - PullRequest
2 голосов
/ 14 февраля 2011

Я случайно заменил окончания строк CRLF на LF во время коммита.История файлов теперь выглядит следующим образом:

+---------+-----------+
| Version | Line Feed |
+---------+-----------+
|    4    | CRLF      |
|    3    | CRLF      | << changed all LFs back to CRLFs
|    2    | LF        | << mistake introduced here
|    1    | CRLF      |
+---------+-----------+

Проблема в том, что этот файл теперь идентифицирован как двоичный файл (даже после того, как я вручную исправил проблему в версии 3).Это привело к тому, что diff, blame и другие инструменты перестали работать должным образом с этим текстовым файлом.

Я попытался установить *.xml crlf diff в ./git/info/attributes, но он работает только для diff, а не для blame, также подозреваю, что у меня могут возникнуть проблемы с конфликтами слияния.Он также выдает мне LF will be replaced by CRLF предупреждения при фиксации этого файла, указывая, что настройки атрибутов недостаточны.

Это в ОС Windows с установленным autocrlf = true. Как мне заставить git снова идентифицировать его как текстовый файл?

1 Ответ

4 голосов
/ 14 февраля 2011

Атрибут 'crlf' устарел. Он был заменен атрибутами text и eol, но вам, скорее всего, не нужно использовать атрибут eol.

Git никогда не предназначался для внутреннего хранения концов строк CRLF, поэтому для полного исправления может потребоваться переписывание истории. Коммиты, которые изменили окончание строки, будут самыми ранними коммитами, которые увидит виновный, потому что он думает, что весь файл был переписан (это было).

Один из способов предотвратить повторение этого - добавить * text=auto к .gitattributes и передать этот файл в репозиторий.

Более подробную информацию об этом можно найти на справочной странице gitattributes .

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