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++プロジェクトで特に重要です。

試してみる — .gitattributes Generator

フルツールを開く