Как переопределить окончания строк в подкаталогах через .gitattributes без расширения + указанное расширение? - PullRequest
1 голос
/ 04 июня 2019

Мне нужно клонировать репозиторий, содержащий сценарии 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

1 Ответ

2 голосов
/ 04 июня 2019

Означает ли "в Windows" "с core.autocrlf set"?Afaik Git не использует аппаратные настройки по умолчанию для ОС, но шаблоны установки Windows обычно имеют набор core.autocrlf.

В любом случае, я думаю, что вы, возможно, пропустили

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

в документации по атрибутам;у вас есть явная

bin/* text eol=lf

настройка eol для всего в bin, и ваш bin/*.ps1

bin/*.ps1 text=auto

не отменяет его, поэтому bin/*.ps1наследует явный атрибут eol=lf.Вы можете проверить это с помощью git check-attr eol bin/any.ps1 или git check-attr -a bin/any.ps1.

Так что, если мой кофе все еще работает правильно, необходимо исправить это, добавив -eol к вашему шаблону атрибута bin/*.ps1, чтобы переопределить ваши предыдущие bin/* eol=lfсила.

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