Проблема с окончаниями строк при разработке в Windows, но выполняется в контейнере докеров UNIX

#bash #docker #unix #line-endings

#bash #docker #unix #окончания строк

Вопрос:

Моя команда создает наше первое .NET-приложение на базе docker и написала скрипт bash, который запускается как часть процесса сборки (из файла dockerfile). Мы все на компьютерах с Windows 10.

При запуске скрипта bash он выдает ошибку : /bin/bash^M: bad interpreter: No such file or directory .

Судя по моим исследованиям, это связано с тем, что окончания строк являются окончаниями строк Windows, а не на основе UNIX. Я смог исправить это, преобразовав окончания с помощью Notepad , и скрипт работал нормально. Однако, когда я зашел в SourceTree, чтобы просмотреть измененные файлы, он кратко отображался как измененный файл (с чем-то, говорящим, что он не может обнаружить изменения). Как только я нажал кнопку stage file, она исчезла, как будто не было никаких измененных файлов.

Как мне решить эту проблему? Я вижу настройку окончаний строк в GIT, но не уверен, какой должна быть правильная настройка.

Ответ №1:

Использование dos2unix поможет вам решить эту проблему. Что делает dos2unix, так это удаляет скрытые символы Windows, с которыми вы сталкиваетесь (^M).

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

Если на вашем компьютере с Linux еще нет dos2unix:

Установите dos2unix

 apt install dos2unix
 

Запустите dos2unix для вашего проблемного файла

 dos2unix your_problematic_file.txt
 

Комментарии:

1. Спасибо, но моя проблема на самом деле не в преобразовании окончаний строк. Я знаю, как это сделать. Моя проблема в том, что мы разрабатываем на компьютерах с Windows, поэтому я преобразовал окончания, но GIT не распознает файл, который был изменен, чтобы я мог проверить его, чтобы другие разработчики могли его забрать.

Ответ №2:

Вероятно, вы ищете .gitattributes файл.

Это позволяет вам устанавливать, в каких файлах вы хотите, какие окончания строк.

Подробнее читайте здесь: Документация

Ответ №3:

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

 * text=auto
*.sh text eol=lf
*.conf text eol=lf
 

Источник