我需要将包含bash和PowerShell脚本的仓库克隆到MacOS和Windows系统,通过Atom进行编辑,在MacOS上运行本机bash脚本,或者在Windows上通过Ubuntu WSL Shell运行,仅在Windows的PowerShell窗口中运行PowerShell脚本
在MacOS上,所有文件均应以本机(LF)结尾。
在Windows上,所有文件均应以本机(CRLF)结尾,但例外:
基本上,我们可以使用* text = auto,然后对特定的文件扩展名进行覆盖,只有一种特殊情况-在任何级别的bin目录中的bash脚本通常都不会具有任何扩展名,包括* .sh。
之所以需要这样做,是因为在正常行为下,通过WSL中的/ mnt / c路径访问时,以Windows文件系统结尾的CRLF行检出的bash脚本无法运行。在提交之前,我们需要编辑并运行它们。
我已经找到并尝试了此处发现的问题中显示的解决方案,这似乎表明我可以使用特定于目录的替代来覆盖默认的自动文本处理。此方法有效,但其他更具体的替代无效。
/。git属性:
# 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
答案 0 :(得分:2)
“在Windows上”是否意味着“已设置core.autocrlf
”? Afaik Git并不默认使用默认操作系统,但是Windows安装的模板通常设置为core.autocrlf
。
无论如何,我认为您可能已经错过了
当有多个模式与路径匹配时,后一行将覆盖前一行。 此覆盖按属性完成。
在属性docs中;你有一个明确的
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
力。