WindowsファイルにCRLF行末を強制する
Visual Studioソリューションファイル、バッチスクリプト、PowerShellファイルなどのWindows固有のファイルにCRLF行末を強制する.gitattributesの設定方法。
Line Endings
詳細な説明
eol=crlfでCRLFを強制する
一部のファイルがLF行末を必要とするのと同様に、特定のWindows固有のファイルが正しく機能するためにはCRLF(\r\n)行末が必要です。Visual Studioソリューションファイル、バッチスクリプト、PowerShellスクリプトはすべてCRLFを期待しています。
ディレクティブ
*.sln text eol=crlf
*.bat text eol=crlf
*.cmd text eol=crlf
*.ps1 text eol=crlf
*.props text eol=crlf
*.vcxproj text eol=crlf
Visual StudioソリューションにCRLFが必要な理由
Visual Studioの.slnファイルパーサーは行末について厳格です。.slnファイルがLF行末を使用すると、Visual Studioは:
- ソリューションを正しくロードできない場合がある
- ファイルをCRLFで書き直し、ダーティな作業ツリーを作成する
- エンコーディング警告を表示する
eol=crlfを指定することで、macOS/Linux開発者がリポジトリをチェックアウトしても、これらのファイルにCRLF行末が適用され、Visual Studioの互換性問題を防ぎます。
バッチスクリプトとCRLF
Windowsコマンドインタープリター(cmd.exe)はCRLF行末を必要とします。LF行末のバッチファイルは予期しない動作を引き起こす可能性があります:
- コマンドが正しく実行されない
IFブロックが適切に終了しないFORループがファイル名を誤って解析する
完全なクロスプラットフォーム設定
# グローバル
* text=auto
# LFを強制(Unixツール)
*.sh text eol=lf
Makefile text eol=lf
Dockerfile text eol=lf
# CRLFを強制(Windowsツール)
*.sln text eol=crlf
*.bat text eol=crlf
*.cmd text eol=crlf
*.ps1 text eol=crlf
この設定は、UnixとWindowsの両方のツーリング要件を尊重し、チェックアウトされる場所に関係なく、プラットフォーム固有のファイルが常に正しい行末を持つことを保証します。
ユースケース
Visual Studioソリューションファイル(.sln)、MSBuildプロジェクトファイル(.csproj、.vcxproj)、またはWindowsバッチ/PowerShellスクリプトを含むリポジトリは、それらのファイルにCRLF行末を強制する必要があります。これは、Windowsをターゲットとする.NETおよびC++プロジェクトで特に重要です。