MinEMemO

【Git/GitHub】改行コードCRLFとLFの混在について

📝 更新日:2023-05-23 / 📄 作成日:2023-05-23
Hero Image
目次

はじめに

仕事中にGitHubを使っていたらCRLFとLFの混在が発覚し、対応したのでメモ代わりに記事にしておきます。

CRLFやLFが混在するとダメな理由。

  • CRLFはwindows系の改行コード
  • LFはLinux(GitHub推奨)の改行コード

となっています。

これが混在することで、バッチなどでShellを使ったりする場合の動作に影響がでたり、Windowsアプリでおかしいことになったりと異なる作業環境で影響が出るそうです。

個人的にVS CODEでプログラムを書いてるだけであれば、今まで大きなことは無かったですが、揃えておいた方が後々のトラブルを防げると思い対応しました。

GitHubの改行コードの変換設定について

GitHubにはデフォルトで改行コードを自動で変換する仕組みがあり、基本的には何も起こらないそうですが、変換されないケースも稀にあるようです。

改行コード変換機能「git config --global core.autocrlf」の種類は以下の通り。

  • true:チェックアウト時に「LF→CRLF」、コミット時に「CRLF→LF」
  • input:チェックアウト時に「変換しない」、コミット時に「CRLF→LF」
  • false:チェックアウト時に「変換しない」、コミット時に「変換しない」

何にするかはプロジェクトの方針によって違うと思いますが、個人的にはCRLFへの変換を避けLFに統一という意味で input が無難かなと感じています。

改行コード変換機能の設定を確認するコマンドは↓

git config core.autocrlf

inputに変更するコマンドは↓

git config --global core.autocrlf input

リポジトリにCRLFとLFが混在した場合の解消方法

修正方法については以下の記事様様でしたので、是非ご確認ください。
本当にありがとうございます。

修正方法についてはこちらの記事にすごく助けられました。感謝します。
https://coding-factory.com/news/methodology/cm139

修正コマンドだけ記載しておきます。


1.フォルダ内でCRLFになっているファイルをコマンドで探す。

find . -type f | xargs file | grep CRLF

2.CRLFになっているファイルがあれば、LFに変換。

find . -type f | xargs file | grep CRLF | awk -F: '{print $1}' | xargs dos2unix

3.変換後1のコマンドで再検索し確認
※変換後に残存があれば再度2をしたら解消しました

さいごに

一応乗り越えれて良かったと思います。
いろんなケースがあると思いますが、今後のために備忘録でした。

コマンドについてはChatGPTに聞いたら、すごく良い解説をしてくれますので、お試しあれ!
profile_icon
taka
プログラマー
2017年11月から業務でPHPを触りだしたエンジニアです。 業務経験8年程度。 2022年から「要求整理→設計→実装→テスト→リリース」と開発のステップをきちんと経験したく、 様々な会社を経験しました。 現職が自社案件枯渇、本社エリア以外のSES案件の繋がりがなしと急に発覚し、急遽強制的に転職活動中。 現職をやめるつもりはなかったし、転職は本当に最後にしたいのでもしよければお声がけください。 【GitHub コードサンプル】 https://github.com/tm-qc - Docker、MVC、CRUD、認証、テストなどのサンプルコード(Laravel、ASP.NET CORE) - 経験PJ詳細まとめ