core.autocrlf は「自分のパソコンの Git」に対する改行変換の設定、.gitattributes は「リポジトリに入れて全員で共有する」改行変換の設定です。 両方があるときは .gitattributes の eol 指定が優先されるので、チームで改行コードをそろえたいなら .gitattributes に書くのが近道です。

この記事では、autocrlf(true / input / false)× .gitattributes(指定なし / text=auto / eol=lf / eol=crlf / -text)の全組み合わせで、コミット時とチェックアウト時に改行がどうなるかを実際に確かめて早見表にしました。あわせて 「LF will be replaced by CRLF」警告を再現して意味を読み解き、git ls-files --eol と git add --renormalize で既存リポジトリを直す手順を実行結果つきで示します。OS 別の推奨設定と、コピペで使える .gitattributes のひな形も載せています。

実行環境は Ubuntu 24.04 LTS、Git 2.43.0 です。Linux 上で設定を切り替えて結果を取っているため、Windows・macOS の実機では未実行です。属性の仕様は Git 公式ドキュメントの gitattributes のページを今回開いて確認しました。

改行コード設定の早見表

autocrlf × .gitattributes の組み合わせ

LF のファイルと CRLF のファイルを新しく git add してコミットし、いったん削除してからチェックアウトし直した結果です。「リポジトリ」はコミットされた中身、「作業ツリー」はチェックアウト後の手元のファイルを指します。

.gitattributes の指定 autocrlf=true autocrlf=input autocrlf=false
指定なし リポジトリ LF / 作業ツリー CRLF リポジトリ LF / 作業ツリー LF 変換なし(LF は LF、CRLF は CRLF のまま)
* text=auto リポジトリ LF / 作業ツリー CRLF リポジトリ LF / 作業ツリー LF リポジトリ LF / 作業ツリーは OS の既定(Linux・macOS は LF、Windows は CRLF)
* text 同上 同上 同上
* text=auto eol=lf(eol=lf だけでも同じ) リポジトリ LF / 作業ツリー LF リポジトリ LF / 作業ツリー LF リポジトリ LF / 作業ツリー LF
* text=auto eol=crlf(eol=crlf だけでも同じ) リポジトリ LF / 作業ツリー CRLF リポジトリ LF / 作業ツリー CRLF リポジトリ LF / 作業ツリー CRLF
* -text 変換なし 変換なし 変換なし

表から読み取れる要点は3つです。

  • eol=lf・eol=crlf・-text を書いた行は、autocrlf が何であっても同じ結果になります。個人の設定の違いを吸収できるのは、この3つです。
  • text=auto だけ(eol なし)の行は、autocrlf や OS によって作業ツリーの改行が変わります。
  • どの組み合わせでも、テキストとして扱われたファイルの リポジトリ側は LF にそろいます(変換なしの行を除く)。

3つの設定の役割

設定 書く場所 影響する範囲 役割
core.autocrlf 各自の Git 設定(git config) そのパソコンだけ .gitattributes に指定がないファイルの変換を決める
core.eol 各自の Git 設定 そのパソコンだけ text 指定のファイルを作業ツリーでどの改行にするか(autocrlf が false のときに効く)
.gitattributes リポジトリの中のファイル クローンした全員 ファイルの種類ごとに変換の有無と改行を決める

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Git改行コード設定|autocrlfと.gitattributesの違い」

改行コードと Git の変換のしくみ

改行コードには主に2種類あります。

名前 中身 主に使われる環境
LF \n(1バイト) Linux、macOS、WSL2
CRLF \r\n(2バイト) Windows

同じリポジトリを Windows と macOS・Linux で一緒に使うと、エディタの設定しだいで改行コードが混ざります。改行だけが違うファイルは、中身を変えていないのに全行が変更として表示されます。

git diff --stat
git diff | cat -A | tail -5
 f.txt | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
@@ -1,2 +1,2 @@$
-a$
-b$
+a^M$
+b^M$

^M が CR(\r)です。2行のファイルの改行を CRLF に変えただけで、2行とも変更あつかいになりました。

Git の改行変換は、次の2つのタイミングで働きます。

flowchart LR
    W[作業ツリー<br>手元のファイル] -- "git add(コミット時)<br>CRLF を LF に変換" --> I[インデックス/リポジトリ]
    I -- "git checkout(チェックアウト時)<br>LF を CRLF に変換、または変換なし" --> W

リポジトリの中は LF にそろえ、作業ツリーに取り出すときに必要なら CRLF にする、というのが Git の考え方です。autocrlf と .gitattributes は、この2つの変換を「するか・しないか」「どちらの改行にするか」を決めています。

core.autocrlf の3つの値

git config --global core.autocrlf true    # または input / false
git config --show-origin --get core.autocrlf
git config --list --show-scope | grep -i crlf
file:.git/config    false
local   core.autocrlf=false

--show-origin と --show-scope を付けると、どのファイル・どの範囲(system / global / local)で設定されているかがわかります。意図と違う値になっているときに役立ちます。

値 コミット時(git add) チェックアウト時 向いている環境
true CRLF → LF LF → CRLF Windows で、手元は CRLF で扱いたい
input CRLF → LF 変換なし macOS・Linux・WSL2
false 変換なし 変換なし 変換を .gitattributes にまかせたい、または一切変換したくない

実際に確かめた結果です(.gitattributes なし)。

autocrlf LF で作ったファイル CRLF で作ったファイル
true リポジトリ LF / 作業ツリー CRLF リポジトリ LF / 作業ツリー CRLF
input リポジトリ LF / 作業ツリー LF リポジトリ LF / 作業ツリー LF
false リポジトリ LF / 作業ツリー LF リポジトリ CRLF / 作業ツリー CRLF

false のときだけ、CRLF がそのままリポジトリに入ります。 全員が false で、エディタの改行設定がそろっていない場合に、改行が混ざりやすくなります。

「LF will be replaced by CRLF」警告を再現する

警告が出る条件

core.autocrlf=true の状態で、LF のファイルを git add すると表示されます。

printf 'line1\nline2\n' > lf.txt          # LF のファイル
printf 'line1\r\nline2\r\n' > crlf.txt    # CRLF のファイル
printf 'a\r\nb\n' > mixed.txt             # 混在
git config core.autocrlf true
git add lf.txt
git add crlf.txt mixed.txt
warning: in the working copy of 'lf.txt', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'mixed.txt', LF will be replaced by CRLF the next time Git touches it

CRLF だけの crlf.txt には警告が出ず、LF を含む2つのファイルに出ています。

警告の意味

「手元のこのファイルは今 LF だが、次に Git がこのファイルを書き出すとき(チェックアウトなど)には CRLF になる」 というお知らせです。エラーではなく、git add は完了しています。リポジトリの中身が変わるわけでもありません。

直後の状態を git ls-files --eol で見ると、警告の内容がそのまま読み取れます。

git ls-files --eol
i/lf    w/crlf  attr/                   crlf.txt
i/-text w/-text attr/                   data.bin
i/lf    w/lf    attr/                   lf.txt
i/lf    w/mixed attr/                   mixed.txt

lf.txt はリポジトリ側(i/)も作業ツリー側(w/)も LF です。コミットしてからチェックアウトし直すと、こう変わります。

git commit -qm init
rm lf.txt crlf.txt mixed.txt
git checkout -- .
git ls-files --eol
i/lf    w/crlf  attr/                   crlf.txt
i/-text w/-text attr/                   data.bin
i/lf    w/crlf  attr/                   lf.txt
i/lf    w/crlf  attr/                   mixed.txt

警告のとおり、作業ツリーの lf.txt と mixed.txt が CRLF に変わりました。 バイナリの data.bin は -text と判定され、変換の対象外です。

逆向きの警告「CRLF will be replaced by LF」

core.autocrlf=input の状態で CRLF のファイルを追加すると、逆向きの警告になります。

git config core.autocrlf input
printf 'x\r\ny\r\n' > new_crlf.txt
git add new_crlf.txt
git ls-files --eol new_crlf.txt
warning: in the working copy of 'new_crlf.txt', CRLF will be replaced by LF the next time Git touches it
i/lf    w/crlf  attr/                   new_crlf.txt

リポジトリには LF で入り、手元のファイルは CRLF のままです。次にチェックアウトされると LF になります。

警告への対応の選び方

状況 対応
手元が CRLF になってよい(Windows のエディタで扱う) そのままでよい。警告は確認用のお知らせ
手元も LF のままにしたい .gitattributes に * text=auto eol=lf を書く(autocrlf より優先される)
自分のパソコンだけ変えたい git config --global core.autocrlf input
警告を止めたいだけ git config --global core.safecrlf false(変換は行われる)
変換が起きるなら追加を止めたい git config --global core.safecrlf true

core.safecrlf の動きも確かめました。

# autocrlf=input の状態で CRLF のファイルを追加
git -c core.safecrlf=true  add new2.txt; echo "rc=$?"
git -c core.safecrlf=false add new2.txt; echo "rc=$?"
fatal: CRLF would be replaced by LF in new2.txt
rc=128
rc=0

safecrlf=true は警告を「追加を止めるエラー」に変え、false は警告を表示しなくなります。 既定は警告の表示です。Git 2.43.0 の文面は上のとおりですが、版によって警告の言い回しが異なることがあります。

git ls-files --eol の読み方

改行コードの状態を一覧できるコマンドです。直す前の調査と、直した後の確認の両方に使います。

i/lf    w/crlf  attr/text=auto eol=lf   src/app.js
列 意味
i/... インデックス(リポジトリに入る中身)の改行
w/... 作業ツリー(手元のファイル)の改行
attr/... そのファイルに効いている .gitattributes の属性
最後の列 ファイルのパス
値 意味
lf LF だけ
crlf CRLF だけ
mixed LF と CRLF が混在
-text バイナリと判定された
none 改行を含まない(空のファイルなど)

リポジトリに CRLF や混在が入っているファイルだけを抜き出すには、grep と組み合わせます。

git ls-files --eol | grep -E '^i/(crlf|mixed)'

属性がどう解釈されたかは git check-attr で確かめられます。

git check-attr text eol -- src/app.js scripts/build.bat logo.png
src/app.js: text: auto
src/app.js: eol: lf
scripts/build.bat: text: set
scripts/build.bat: eol: crlf
logo.png: text: unset
logo.png: eol: lf

logo.png には eol: lf も表示されていますが、text が unset(-text)なので変換は行われません。

.gitattributes の書き方

属性の一覧

書き方 意味
* text=auto Git がテキストと判定したファイルだけ変換する。バイナリは対象外
*.md text 必ずテキストとして変換する
*.sh text eol=lf テキストとして扱い、作業ツリーでも必ず LF
*.bat text eol=crlf テキストとして扱い、作業ツリーでは必ず CRLF
*.png -text 改行変換をしない
*.png binary -text -diff -merge をまとめた指定。変換も差分表示もしない

書き方のきまりは次のとおりです。

  • 1行に「パターン 属性 属性 ...」を書きます。パターンの書き方は .gitignore とほぼ同じです。
  • 同じファイルに複数の行が当てはまるときは、後ろの行が優先されます。全体の既定を先頭に、個別の指定を後ろに書きます。
  • eol を書くと、text を書かなくてもテキストとして扱われます(公式ドキュメントの記述どおり、eol=lf だけの行も text eol=lf と同じ結果になりました)。

eol なしの text=auto は OS の既定に従う

* text=auto だけを書き、core.autocrlf=false にしたうえで core.eol を切り替えた結果です。

設定 LF で作ったファイルのチェックアウト後
core.eol=lf 作業ツリー LF
core.eol=crlf 作業ツリー CRLF
core.eol=native(Linux で実行) 作業ツリー LF
core.autocrlf=true と core.eol=lf の両方 作業ツリー CRLF(autocrlf が優先)

core.eol の既定は native(OS に合わせる)で、Windows では CRLF になります。公式ドキュメントにも「text が設定されていて autocrlf も core.eol も設定されていない場合、Windows では eol=crlf、それ以外では eol=lf が既定」と書かれています。全員の手元を同じ改行にしたいなら、eol=lf まで書くのが確実です。

コピペ用 .gitattributes ひな形

リポジトリの一番上に置きます。

# 既定: テキストと判定したものは LF で保存し、作業ツリーも LF
* text=auto eol=lf

# Windows 専用のスクリプトは CRLF で取り出す
*.bat  text eol=crlf
*.cmd  text eol=crlf
*.ps1  text eol=crlf

# シェルスクリプトは必ず LF
*.sh   text eol=lf

# バイナリは変換しない
*.png  binary
*.jpg  binary
*.pdf  binary
*.zip  binary

このひな形で、属性が意図どおりに付くことを確かめました。

git check-attr text eol diff -- a.sh b.bat c.png d.md
a.sh: text: set
a.sh: eol: lf
a.sh: diff: unspecified
b.bat: text: set
b.bat: eol: crlf
b.bat: diff: unspecified
c.png: text: unset
c.png: eol: lf
c.png: diff: unset
d.md: text: auto
d.md: eol: lf
d.md: diff: unspecified

手元も Windows の改行で扱いたいチーム向けには、1行目を次のように変えます。

# リポジトリは LF、作業ツリーは各自の OS に合わせる
* text=auto

既存リポジトリを git add --renormalize で直す

すでに CRLF が混ざったリポジトリを、LF にそろえる手順です。.gitattributes を追加しただけでは、すでにコミットされているファイルの中身は変わりません。 git add --renormalize で、現在の設定に合わせて入れ直します。

手順1:現状を調べる

CRLF・混在・LF・バイナリが混ざったリポジトリを用意しました(core.autocrlf=false)。

git ls-files --eol
i/-text w/-text attr/                   logo.png
i/crlf  w/crlf  attr/                   scripts/build.bat
i/crlf  w/crlf  attr/                   scripts/build.sh
i/crlf  w/crlf  attr/                   src/app.js
i/mixed w/mixed attr/                   src/mixed.md
i/lf    w/lf    attr/                   src/style.css

リポジトリ側(i/)に crlf が3つ、mixed が1つあります。

手順2:.gitattributes を置く

cat .gitattributes
git status --short
* text=auto eol=lf
*.bat text eol=crlf
*.png binary
 M scripts/build.bat
?? .gitattributes

.gitattributes を置いただけで、build.bat が「変更あり」と表示されました。属性が付いたことで、「リポジトリ側は LF であるべきなのに CRLF が入っている」と Git が判断したためです。ほかのファイルは、次の手順で入れ直すまで変化がありません。

手順3:renormalize を実行する

作業ツリーに未コミットの変更がない状態で実行します。

git add --renormalize .
git status --short
git diff --cached --stat
M  scripts/build.bat
M  scripts/build.sh
M  src/app.js
M  src/mixed.md
?? .gitattributes
 scripts/build.bat | 4 ++--
 scripts/build.sh  | 4 ++--
 src/app.js        | 4 ++--
 src/mixed.md      | 2 +-
 4 files changed, 7 insertions(+), 7 deletions(-)

CRLF が入っていた4ファイルだけがステージされました。もともと LF だった style.css とバイナリの logo.png は対象になっていません。

手順4:コミットして確認する

git add .gitattributes
git commit -m "Normalize line endings"
git ls-files --eol
i/lf    w/lf    attr/text=auto eol=lf   .gitattributes
i/-text w/-text attr/-text              logo.png
i/lf    w/crlf  attr/text eol=crlf      scripts/build.bat
i/lf    w/crlf  attr/text=auto eol=lf   scripts/build.sh
i/lf    w/crlf  attr/text=auto eol=lf   src/app.js
i/lf    w/mixed attr/text=auto eol=lf   src/mixed.md
i/lf    w/lf    attr/text=auto eol=lf   src/style.css

リポジトリ側(i/)はすべて LF になりました。一方、作業ツリー側(w/)にはまだ CRLF が残っています。renormalize が書き換えるのはインデックスだけで、手元のファイルはそのままだからです。

手順5:作業ツリーを取り出し直す

git rm -q --cached -r .
git reset -q --hard
git ls-files --eol
i/lf    w/lf    attr/text=auto eol=lf   .gitattributes
i/-text w/-text attr/-text              logo.png
i/lf    w/crlf  attr/text eol=crlf      scripts/build.bat
i/lf    w/lf    attr/text=auto eol=lf   scripts/build.sh
i/lf    w/lf    attr/text=auto eol=lf   src/app.js
i/lf    w/lf    attr/text=auto eol=lf   src/mixed.md
i/lf    w/lf    attr/text=auto eol=lf   src/style.css

作業ツリーも、build.bat だけ CRLF、ほかは LF という .gitattributes どおりの状態になりました。git reset --hard は未コミットの変更を取り消すコマンドなので、必ずコミット済みの状態で実行してください。新しくクローンし直す方法でも同じ結果になります。

text=auto はコミット済みの CRLF をそのまま保つ

text=auto には「すでに CRLF でコミットされているファイルは変換しない」というきまりがあります。確かめた結果です。

# old.txt は CRLF でコミット済み。.gitattributes に "* text=auto" を追加後、
# old.txt を編集し、new.txt(CRLF)を新しく作って git add
git add . ; git ls-files --eol
warning: in the working copy of 'new.txt', CRLF will be replaced by LF the next time Git touches it
i/lf    w/lf    attr/text=auto          .gitattributes
i/lf    w/crlf  attr/text=auto          new.txt
i/crlf  w/crlf  attr/text=auto          old.txt

新しい new.txt は LF に変換されましたが、コミット済みだった old.txt は、編集して add しても CRLF のままです。ここで renormalize を実行すると LF にそろいます。

git add --renormalize . ; git ls-files --eol
i/lf    w/lf    attr/text=auto          .gitattributes
i/lf    w/crlf  attr/text=auto          new.txt
i/lf    w/crlf  attr/text=auto          old.txt

「.gitattributes を入れたのに直らない」と感じたときは、このきまりが働いています。導入のときに一度 renormalize する、と覚えておくとすっきりします。

直した後の差分と blame の見え方

改行だけを直したコミットは、行数ぶんの変更として記録されます。レビューや履歴の調査では、次のオプションが役立ちます。

git diff HEAD~1 --stat -- src/app.js
git diff HEAD~1 --stat --ignore-cr-at-eol -- src/app.js
 src/app.js | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

--ignore-cr-at-eol を付けた2つ目は何も表示されず、改行以外の変更がないことを確かめられます。

git blame は、そのままだと全行が「Normalize line endings」のコミットを指しますが、-w を付けると元のコミットをたどれました。

コマンド 1行目が指したコミット
git blame src/app.js Normalize line endings
git blame -w src/app.js initial (CRLF mixed in)

renormalize の手順まとめ

順番 コマンド 目的
1 git status 未コミットの変更がないことを確認する
2 git ls-files --eol 現状を調べる
3 .gitattributes を作成 ルールを決める
4 git add --renormalize . 現在のルールでインデックスを入れ直す
5 git status、git diff --cached --stat 対象のファイルを確認する
6 git add .gitattributes && git commit 改行の修正だけを1つのコミットにする
7 取り出し直し、またはクローンし直し 作業ツリーにも反映する
8 git ls-files --eol 結果を確認する

改行の修正は、機能の変更と分けて単独のコミットにすると、あとから差分を読みやすくなります。ほかの人が作業中のブランチとは、この修正を取り込んだあとに改行の差で競合が出ることがあるので、実施のタイミングをチームで共有しておくとスムーズです。

Windows・WSL2・macOS 別の推奨設定

この節の OS 別の設定は、Windows・macOS の実機では未実行です。上の早見表(Linux 上で設定を切り替えて確認した結果)と公式ドキュメントの記述をもとに整理しています。

リポジトリに .gitattributes がある場合(おすすめ)

* text=auto eol=lf のように eol まで書いてあれば、個人の autocrlf の値に関係なく同じ結果になります。早見表のとおり、true・input・false のどれでも、リポジトリ LF・作業ツリー LF でした。

リポジトリに .gitattributes がない場合

環境 推奨する設定 コマンド 結果
Windows(Git for Windows) true git config --global core.autocrlf true リポジトリ LF、手元 CRLF
Windows で手元も LF にしたい input git config --global core.autocrlf input リポジトリ LF、手元は変換なし
WSL2(Linux 側の Git) input git config --global core.autocrlf input リポジトリ LF、手元は変換なし
macOS input git config --global core.autocrlf input リポジトリ LF、手元は変換なし
Linux input git config --global core.autocrlf input リポジトリ LF、手元は変換なし

どの環境でも コミット時に CRLF が LF になる設定なので、リポジトリには LF だけが入ります。

WSL2 を使うときのポイント

  • WSL2 の中の Git と Windows 側の Git は、設定ファイルが別々です。それぞれで git config --global を設定します。
  • 同じ作業ツリーを Windows 側の Git(autocrlf=true)と WSL2 側の Git(autocrlf=input)の両方から操作すると、手元の改行の解釈が変わり、変更していないファイルに差分が出ることがあります。どちらか一方の Git で操作すると決めておくと安定します。
  • eol=lf を書いた .gitattributes があれば、どちらの Git から操作しても作業ツリーは LF になります。

エディタ側もそろえる

Git の設定に加えて、エディタが新しいファイルを作るときの改行もそろえておくと、警告を見る機会が減ります。EditorConfig に対応したエディタなら、リポジトリに次のファイルを置く方法があります(エディタの動作は未実行です)。

# .editorconfig
root = true

[*]
end_of_line = lf
insert_final_newline = true

[*.{bat,cmd,ps1}]
end_of_line = crlf

改行コードが原因のエラーと直し方

シェルスクリプトが起動しない

1行目(シバン)の末尾に CR が付いていると、インタープリタの名前が /bin/bash\r と解釈されます。

printf '#!/bin/bash\r\necho hi\r\n' > x.sh
chmod +x x.sh
./x.sh
./x.sh: cannot execute: required file not found

ファイル自体は存在するのに「required file not found」と表示されるのが特徴です(bash 5.2 での表示。行頭には呼び出し元の名前と行番号が付きます)。

CR が入っているかを調べて取り除く

file f.txt
grep -c $'\r' f.txt
sed -i "s/\r$//" f.txt
file f.txt
f.txt: ASCII text, with CRLF line terminators
2
f.txt: ASCII text

file コマンドは「with CRLF line terminators」と表示し、grep -c $'\r' は CR を含む行数を返します。sed -i "s/\r$//" で行末の CR を取り除けます。根本的には、*.sh text eol=lf を .gitattributes に書いておくと、どの OS でチェックアウトしても LF になります。

症状から引く対応表

症状 原因 対応
LF will be replaced by CRLF と表示される autocrlf=true で LF のファイルを add した そのままでよい。手元も LF にしたいなら eol=lf を書く
CRLF will be replaced by LF と表示される autocrlf=input や text 指定で CRLF のファイルを add した そのままでよい。リポジトリには LF で入る
fatal: CRLF would be replaced by LF で add できない core.safecrlf=true ファイルの改行を直すか、safecrlf を見直す
変更していないのに全行が差分になる 改行コードが変わった git diff --ignore-cr-at-eol で確認し、.gitattributes と renormalize でそろえる
.gitattributes を入れたのに CRLF のまま text=auto はコミット済みの CRLF を保つ git add --renormalize . を実行する
シェルスクリプトが required file not found シバンの行末に CR *.sh text eol=lf を書いて取り出し直す
.bat が LF になって動きが変わる 既定の eol=lf が当たっている *.bat text eol=crlf を後ろの行に書く
画像が壊れる テキストとして変換された *.png binary を書く

よくある質問

Q. autocrlf と .gitattributes は、どちらが優先されますか? A. .gitattributes に eol=lf や eol=crlf、-text が書かれているファイルは、autocrlf の値に関係なくその指定どおりになります。本文の早見表のとおり、true・input・false のすべてで同じ結果でした。text=auto だけで eol がない場合は、作業ツリーの改行が autocrlf と core.eol、OS の既定で決まります。

Q. 「LF will be replaced by CRLF」は直さないといけませんか? A. エラーではなく、次のチェックアウトで手元のファイルが CRLF になることを知らせる表示です。git add は完了していて、リポジトリには LF で入ります。手元も LF のままにしたい場合は、.gitattributes に * text=auto eol=lf を書くと表示されなくなります。

Q. git add --renormalize を実行すると、履歴はどうなりますか? A. 過去のコミットは書き換わりません。現在のファイルを LF に入れ直す新しいコミットが1つ増えます。改行だけの差分は git diff --ignore-cr-at-eol で除外でき、git blame -w で元のコミットをたどれます。

Q. core.autocrlf は false にしておくほうがよいですか? A. リポジトリに eol つきの .gitattributes があるなら、false でも結果は同じです。.gitattributes がないリポジトリで false にすると変換が一切行われないので、CRLF がそのままコミットされます。その場合は Windows なら true、macOS・Linux・WSL2 なら input が扱いやすい設定です。

まとめ

  • autocrlf は個人の設定、.gitattributes はリポジトリで共有する設定。eol を書いた .gitattributes は autocrlf より優先される
  • * text=auto eol=lf を書くと、autocrlf が true・input・false のどれでもリポジトリ LF・作業ツリー LF になる
  • 「LF will be replaced by CRLF」はエラーではなく、次のチェックアウトで手元が CRLF になるというお知らせ
  • git ls-files --eol の i/ はリポジトリ、w/ は作業ツリー、attr/ は効いている属性
  • 既存リポジトリは git add --renormalize . で入れ直す。text=auto はコミット済みの CRLF を保つため、導入時に一度実行する
  • renormalize のあと、作業ツリーは取り出し直すまで元の改行のまま
  • .bat は eol=crlf、.sh は eol=lf、画像は binary と個別に指定する

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Git改行コード設定|autocrlfと.gitattributesの違い」

株式会社RJCでは、Gitの設定やチーム開発での使い方を仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?