リモートから取得したファイルをローカルのWindows環境で変更し、いざ「git add」しようとしたところ、CRLF will be replaced by LF in ~
というワーニングが発生しました。
見たところ、「改行コードが異なっているので変更しておきますね」というメッセージのように見えるのですが、明確な理由がわからないままでは落ち着かない気がしたので、少し調べてみました。
今回はGitでCRLF will be replaced by LF in ~
が出た際の対処法をご紹介しますね。
そもそもの原因はgitの環境設定にあり
そもそも、なぜGitが改行コードを変更しようとしたのかと言いますと、Gitの環境設定の影響です。
例えば、同じプロジェクト内に、Macで開発しているメンバーとWindowsで開発をしているメンバーがいたとします。
このときに、互いに何も考えずにコミット⇨プッシュ⇨プルをしていると、同じファイルの中に2種類の改行コードが存在することになってしまいます。
OSが改行と認識できるのは自分側の改行コードだけですので、相手の編集部分に含まれている改行コードは正しく認識できず、ファイルの中身がぐちゃぐちゃになっているように見えてしまうのです。
この問題を解決するために、Gitには改行コードを変換する設定が搭載されています。
1種類にまとめておけば、開発環境が異なっていても、同じようにファイルを扱うことができますよね。
そのあたりのロジックについては以下の記事がとてもわかりやすいです。
参考:気をつけて!Git for Windowsにおける改行コード
その設定に基づいて、Gitが改行コードを変換する際に表示されるのがCRLF will be replaced by LF in ~
というワーニングなのです。
gitの環境設定を変更する方法
そうは言っても、勝手に変換されては困るという場合もあるでしょう。
そんなときはGitの設定を変更すれば大丈夫です。
まずは、以下のコマンドでGitの環境設定を確認しましょう。
git config --list | grep -i autocrlf
コマンド結果として、core.autocrlf = ○○
と出力されると思います。
○○の部分がinput
かtrue
となっていれば、今回のワーニングはGitの環境設定が原因です。
その場合は以下のコマンドで自動変換をオフにしましょう。
git config --global core.autocrlf false
これでGitの設定が変更されました。
今後はGit側で改行コードが勝手に変換されることはありません。
終わりに
今回は、GitでCRLF will be replaced by LF in ~
が出た際の対処法をご紹介しました。
- 以下のコマンドを打って設定を変更すればOK
git config --global core.autocrlf false
こちらの記事が参考になりました。
参考:git addしたらCRLF will be replaced by LFなエラー
参考:まくまくGitノート コミット、チェックアウト時に改行コードを自動変換する
Gitの設定ファイルも奥が深いなと思いましたので、少しづつ勉強していこうと思います。
追記
勉強の過程で役に立った本を紹介しました。
興味のある方はご覧くださいませ。