Мне нужно клонировать репозиторий, содержащий сценарии bash и PowerShell, в системах MacOS и Windows, редактировать с помощью Atom на обоих, запускать сценарии bash на MacOS или через оболочку Ubuntu WSL в Windows, запускать сценарии PowerShell в окне PowerShell в Windows Only.
В MacOS все файлы должны быть извлечены с окончаниями Native (LF).
В Windows все файлы должны быть извлечены с окончаниями Native (CRLF), за исключением:
- *. Sh всегда должен использовать LF, независимо от местоположения
- *. PS1 должен использовать native (CRLF в Windows, LF в MacOS)
- *. Bat, то же самоекак * .ps1
- *. cmd, так же, как * .ps1
- bin / * всегда должен использовать LF, если не переопределено
- bin / *. ps1 должен использовать native
- bin / *. Bat должен использовать native
- bin / *. Cmd должен использовать native
По сути, мы можем использовать * text = auto, затем переопределить дляконкретные расширения файлов, с одним особым случаем - скрипты bash внутри каталога bin на любом уровне не будутобычно имеют какое-либо расширение, включая * .sh.
Причина, по которой это необходимо, заключается в том, что при нормальном поведении скрипты bash, извлеченные из строки CRLF, заканчивающейся в файловой системе Windows, не могут запускаться при доступе через / mnt/ c путь в WSL.Нам нужно отредактировать И запустить их до того, как мы подтвердим.
Я нашел и попробовал решения, показанные в найденных здесь проблемах, которые, кажется, показывают, что я могу переопределить автоматическую обработку текста по умолчанию с помощью переопределений, специфичных для каталогов.Это работает, но тогда дополнительные переопределения, которые являются более конкретными, не работают.
/. Gitattributes:
# Autodetect text files
* text=auto
# Explicitly identify binary files
*.xls binary
*.xlsx binary
*.doc binary
*.docx binary
*.vsd binary
*.vsdx binary
*.pdf binary
*.png binary
*.jpg binary
*.gif binary
# Explicitly identify script files
*.sh text eol=lf
*.ps1 text
*.bat text
*.cmd text
bin/* text eol=lf
bin/*.ps1 text=auto
bin/*.bat text=auto
bin/*.cmd text=auto
# Explicitly identify text files
*.txt text
*.md text
*.json text
*.yaml text
Ожидаемые результаты в Linux = все файлы используют собственные, LF окончания строк.Кажется, это работает.
Ожидаемые результаты в Windows:
/test - expect CRLF - correct
/test.sh - expect LF - correct
/test.ps1 - expect CRLF - correct
/bin/test - expect LF - correct
/bin/test.sh - expect LF - correct
/bin/test.ps1 - expect CRLF - INCORRECT, uses LF
/bin/test.bat - expect CRLF - INCORRECT, uses LF
Я не проверял это явно, но также ожидаю этого:
/templates/test - expect CRLF
/templates/test.sh - expect LF
/templates/test.yaml - expect CRLF
/templates/test.ps1 - expect CRLF
/section1/test - expect CRLF
/section1/test.sh - expect LF
/section1/test.ps1 - expect CRLF
/section1/bin/test - expect LF
/section1/bin/test.sh - expect LF
/section1/bin/test.ps1 - expect CRLF