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
プログラマー
いつでも転職希望の業務経験7年目(2023時点)のエンジニアです。 仕事の合間にすこしずつ転職活動はしていますが、条件が合う場合ぜひTwitterなどでご連絡頂けると嬉しいです。 希望条件は基本的に残業は1日x1h程度。収入は一旦現状維持。 ある程度で構わないので、保守運用が管理されていて、精神的に安心して働ける環境が良いです。 経験言語はHTML、CSS、javascript、PHP、MySQL、Docker、Vuejs、Laravel このブログは完全に自作で静的ジェネレータで作りました。 この範囲で言えば React.js Gatsby.js GraphQLも経験があります。 最近はAIがどう社会に受け入れられ、日常になっていくのかの行く末が気になっています。 今までの人生で一番変化を感じて不思議な感覚です。