2

У меня есть довольно длинные C++ файлы, и git diff --check сообщает, что есть несколько возвратов каретки ^M примерно на 15 разных строках. Это на машине с Windows 7. После поиска в нескольких решениях, например в Advanced Save Options Visual Studio или в преобразованиях EOL в Notepad++, кажется, что все они изменяют каждую строку, а не только те, на которые жалуется Git. Это приводит к замене git diff каждой строки.

Может ли это быть из-за того, что все предыдущие изменения в этих файлах также имели возврат каретки ^M а предыдущие коммиты игнорировали все предупреждения возврата каретки?

Запуск git config core.autocrlf возвращает true, но размещение файла ничего не делает, когда я запускаю git diff --cached --check для этого файла после его размещения.

Есть ли способ их удалить? Вручную идти к линии и пытаться измениться, кажется, не помогает.

4 ответа4

1

Используйте dos2unix <file> если в командной строке. Он исправит необходимые окончания строки или ничего не сделает, если ничего не нужно. Сделай find . -name "*.cpp" -exec dos2unix {} + для создания нескольких файлов. Затем сравните с git diff перед коммитом.

Лучше всего избегать использования в файлах окончаний со смешанными строками. Это может сделать слияние и последующую историю неловкими.

Некоторые редакторы не меняют стиль, но я думаю, что если хотя бы один ^ M попадет в файл, некоторые редакторы примут стиль dos и изменят все окончания строк при написании файла.

Обычно можно найти настройки для редакторов, которые позволят редактору придерживаться желаемого стиля. Конец строки и настройки табуляции также обычно устанавливаются в зависимости от стиля.

1

Git может сделать это автоматически с помощью git config --global core.autocrlf true . Но он делает это во время проверки или фиксации времени. Таким образом, git не будет показывать поэтапные изменения, но должен спокойно позаботиться о преобразовании, если ваш редактор вводит некоторые новые нежелательные окончания строк.

Я думаю, что используйте dos2unix, если нежелательные окончания строки уже находятся в хранилище.

Подробности см. Здесь:https://stackoverflow.com/questions/10418975/how-to-change-line-ending-settings и прочитайте http://git-scm.com/book/en/Customizing-Git. -Git-конфигурации # Форматирование-и-Пробелы

0

15 строк?

В блокноте ++ выберите заменить. Выбрал расширенный. Найдите \r (то есть ^ M) и замените его ничем (если вы не хотите новой строки, затем замените \n). Поскольку вы не хотите, чтобы все ^ M были заменены, не нажимайте «заменить все», выберите те, которые вы хотите заменить.

Если вы используете обычный блокнот Windows, ^ M будут отображаться в виде блоков. Вы можете удалить коробки. Ужасно, но это работает.

0

на машине с Windows вы можете сделать, например:

for /r %f in (*.js) do "c:\Program Files\git\usr\bin\dos2unix.exe" %f

это удалит CR из всех файлов с расширением .js из текущего каталога

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .