LoginSignup
5
3

More than 1 year has passed since last update.

Pro Git の core.autocrlf=input についての説明が間違っている件

Last updated at Posted at 2021-11-10

Qiitaへの初投稿がこんなものでよいか分からないけど、どこに記録しておくのがよいかわからなかったので記しておきます。

改行コードの自動変換に関する config のおさらい

最重要なのは core.autocrlfcore.eol の2つ。core.safecrlf についてはここでは触れない。
あとリポジトリに .gitattributes があればその設定が優先されるけど、それについてもここでは略。

core.autocrlf

チェックイン/チェックアウト時にテキストファイルの改行コードを自動変換するか否かを制御する全体設定。
取りうる値は true, false, input の3つ。明示的に設定されていない場合は false となる。

チェックイン時 チェックアウト時 補足
true 常にLFにしてリポジトリに格納する 常にCRLFにする
input 常にLFにしてリポジトリに格納する 何もしない(そのまま) 「リポジトリへのinput」と理解すればOK1
false 何もしない(そのまま) core.eolに従う

core.eol

作業領域で使う改行コードを設定する。core.autocrlf=false のときにのみ有効。
取りうる値は native, lf, crlf の3つ。明示的に設定されていない場合は native となる。

この設定により、core.autocrlf=false でも結果的にチェックアウト時の改行コードの自動変換が働く。一方、チェックイン時には影響しない(何もしない)。

チェックアウト時
native OS の標準の改行コード
crlf CRLF
lf LF

Pro Git での core.autocrlf=input の説明

上述のとおり core.autocrlf=input の意味は「チェックイン時はtrueと同じ、チェックアウト時は何もしない」であって、OSによって挙動が変わるような設定項目ではない。しかし Pro Git の 「Git の設定」節では以下のように説明されている。

この設定は、Windows にチェックアウトしたときの CRLF への変換は行いますが、Mac や Linux へのチェックアウト時は LF のままにします。

誤訳かと思ったら英語版でもこう書かれている。

This setup should leave you with CRLF endings in Windows checkouts, but LF endings on macOS and Linux systems and in the repository.

この説明は混乱を招いていると思う。いろいろなサイトでこの説明が引用されているので困ったもの。
issueでもこのことが指摘されていたが、修正はされていない模様。

# エンジニアたるもの、間違っていると思ったなら issue 立てるなり Pull Request 投げるなりするべきだが、ちょっとそこまでの余裕が今はない。すみません。

  1. StackOverflowでのQ&Aによると、ファイルが working-tree から index にコピーされる際に行われる自動変換が "input conversion" とのこと。

5
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3