eol=lfでLF行末を強制する
シェルスクリプトや設定ファイルでのCRLF破損を防ぐため、特定のファイルタイプにUnixスタイルのLF行末を強制する.gitattributesの設定方法。
Line Endings
詳細な説明
eol=lfでLFを強制する
text=autoはリポジトリ内で行末を正規化しますが、Windowsでのチェックアウト時にはCRLFに変換されます。一部のファイルは開発者のプラットフォームに関係なく常にLFを使用する必要があります。シェルスクリプト、Makefile、特定の設定ファイルはCRLF行末では動作しません。
ディレクティブ
*.sh text eol=lf
*.bash text eol=lf
Makefile text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
text eol=lfの組み合わせは2つのことを行います:
text— ファイルを正規化対象のテキストファイルとしてマークしますeol=lf— Windows上の作業ディレクトリでもLF行末を強制します
シェルスクリプトにLFが必要な理由
Unixシェル(bash、sh、zsh)は\r(キャリッジリターン)をコマンドの一部として解釈し、次のようなエラーが発生します:
/bin/bash^M: bad interpreter: No such file or directory
^MはCRLFのキャリッジリターン文字です。eol=lfを強制することで、Windows開発者もこれらのファイルで常にLF行末を取得でき、このクラスのバグを防ぎます。
LFが一般的に必要なファイル
| ファイルタイプ | 理由 |
|---|---|
*.sh、*.bash |
シェルインタープリターがLFを要求 |
Makefile |
Makeがレシピ行にLFを要求 |
*.yml、*.yaml |
一部のYAMLパーサーがLFに敏感 |
.env |
DockerやdotenvがCRLFで失敗する可能性 |
Dockerfile |
Dockerビルドがcrlf行末で失敗する可能性 |
.editorconfig |
エディター設定の慣例 |
text=autoとの組み合わせ
* text=auto
*.sh text eol=lf
*.bat text eol=crlf
より具体的なルールは、マッチするファイルパターンに対してグローバルなtext=autoを上書きします。
ユースケース
シェルスクリプト、Makefile、Dockerfile、またはCI設定ファイルを含むリポジトリは、それらのファイルタイプに`eol=lf`を使用する必要があります。これは、Windows開発者がUnixターゲットのデプロイスクリプトに貢献するプロジェクトで特に重要です。