Git の自動改行コード変換 AutoCrlf ってどんな機能なの?

Git の自動改行コード変換 AutoCrlf ってどんな機能なの?

Git のリポジトリーを
Windows でも Mac や Linux でも利用できるようにするための設定項目です。

具体的には、以下のタイミングで
ファイルに含まれる改行コードの変換をどのように行うかの設定です。

  • Git のリポジトリーからファイルをチェックアウトするとき
  • Git のリポジトリーにファイルをコミットとき

設定値は “true”, “imput”, “false” の 3 種類があります。

true
チェックアウト Windows の改行コードへ変換
コミット Mac, Unix の改行コードへ変換

“true” は Windows での推奨設定です。
本当に Windows では “true” に設定するのがいいの?

input
チェックアウト 元のまま
コミット Mac, Unix の改行コードへ変換

“input” は Max, Linux での推奨設定です。

false
チェックアウト 元のまま
コミット 元のまま

“false” は、リポジトリーを Windows でしか使わない場合、
または、 Windows の改行コードと Max, Unix の改行コード両方を
使う必要がある場合のための設定です。

「改行コード」って何?

改行コードとは、コンピューターが改行として扱う特殊な文字情報です。

コンピューターの内部では通常の文字も改行も 2 進数 で表現して扱われており、
これを「文字コード」といいます。

歴史的な理由により、
Mac や Linux では “000 1010” の 1 文字分の文字コード、
Windows では “000 1101” “000 1010” の 2文字分の文字コードで
改行を表します。

Windows と Linux で以下の内容のテキストファイルを作成して
文字コードを確認してみましました。

hello
world
Linux で作成したファイルの改行コード
Linux で作成したファイルの改行コード
Windows で作成したファイルの改行コード
Windows で作成したファイルの改行コード

“000 1101” は “Carriage Return” “CR”,
“000 1010” は “Line Feed” “LF” とよばれます。

つまり、

  • Mac や Linux では改行コードは LF
  • Windows では改行コードは CR + LF

となります。

どうして改行コードを自動的に変換させた方がいいの?

Windows の改行コードを含んだファイルを Mac や Linux で開いたときに
Windows と同じ結果にならないことがあります。
特にプログラムは最終的に Linux サーバーで実行することが多く、
その際にエラーが発生してしまうことがあります。

そのため、Mac や Linux で利用する可能性がある Git のリポジトリーには
Windows の改行コードを含めないように、
コミット時に Mac, Linux の改行コードに変換するように設定します。

つまり Git は基本的にリポジトリーの中を Mac, Linux の改行コードで統一するように
設計されていることになります。

autocrlf = true
autocrlf = true
autocrlf = input
autocrlf = input
autocrlf = false
autocrlf = false

本当に Windows では “true” に設定するのがいいの?

筆者は Windows 上でも “input” に設定しています。
理由は以下のとおりです:

  • 最近のエディターであれば Mac や Linux の改行コードを問題なく扱えるため
  • Windows でチェックアウトしたプログラムを
    その Windows 上で起動した Linux 仮想環境で実行するため
  • Windows でチェックアウトしたファイルを
    そのまま Mac や Linux に転送しても問題ないため
  • Mac, Linux の改行コードのプログラムを Windows 上で実行しても
    問題が起きることがほとんどないため

つまり、改行コードを完全に Mac, Linux に合わせて、
Mac, Linux との親和性を高めて生産性を上げるための設定にしているということです。

どうやって設定するの?

ここではコマンドラインでの設定方法を説明します。
以下のコマンドを実行すると、
現在 OS にログインしているユーザーが Git を使ったとき、
自動改行コード変換が “input” で動作します。

git config --global core.autocrlf input
タイトルとURLをコピーしました