ソースコードなどをバージョン管理しながらインターネット上で公開できるサービス「GitHub」を GUI で操作する無料のアプリ「GitHub Desktop」の管理に、ローカルの Git リポジトリを追加した際に表示される改行コードに関する警告について、検証と推測、その結果としての対処例を紹介します。

※ GitHub Desktop Version 3.5.0 (x64) を使用します。
※ OS は Windows 10 Home です。
本記事の概要
本記事では、GitHub Desktop アプリで表示される改行コードに関する警告 (This diff contains a change in line endings from ‘LF’ to ‘CRLF’.) について調べました。
結局は、リポジトリの内容を変えてその警告が出るかどうかを検証して、その結果として、
Windows で Git の設定 core.autocrlf == true の場合に、作業ディレクトリの差分を持つテキストファイルの改行コードが LF の場合、その後行われるかもしれないチェックアウトでその改行コードが CRLF に変わる可能性を警告しているもので、それを了承していれば警告を無視して問題ない。
という推測と対処(無視で問題なし)に至りました。
以降は、その検証結果や公式の引用を紹介します。
リポジトリを追加した直後に表示された改行コードに関する警告
Git リポジトリを GitHub Desktop アプリの管理に追加すると、そのリポジトリで管理しているファイルの改行コードに関する警告が表示されました。
This diff contains a change in line endings from ‘LF’ to ‘CRLF’.
この差分には、行末の「LF」から「CRLF」への変更が含まれています。
GitHub Desktop の警告文と Google 翻訳

.md や .cfg といった改行 (CRLF) を含む、テキストファイルについては、上記の改行コードに関する警告メッセージが表示されました。

この章で紹介する4つのファイルは、現在選択しているブランチに追加されていないファイルです。
そのため、全行が + の差分になっています。

また、改行のないテキスト(.svg) では、テキストの差分は表示されますが、改行コードに関する警告メッセージは表示されませんでした。

テキストではないバイナリファイル(.png) などを選択すると、改行コードに関する警告は表示されませんでした。

※画像は GodotEngine のプロジェクトの初期に同梱されている png ファイルです。
以上のように、選択しているファイルの内容によって警告メッセージの表示・非表示が切り替わるため、警告メッセージは、現在選択しているファイルの差分情報について警告していると思います。
小さなサンプルリポジトリによる警告メッセージの表示の有無の確認
以下の2つのファイルがあるリポジトリを作成して、 GitHub Desktop アプリの管理に追加しました。
- RepoAutoCRLF1
- a.txt
追加・コミット済み。複数行の日本語の文章 - b.bmp
追加・コミット済み。16×16 の画像
- a.txt
リポジトリを管理へ追加する手順については、以下の記事を参照してください。
検証した条件の組み合わせ表記の説明
以降は、わかりづらいですが、条件ごとに警告メッセージが表示されたかを、同じ形式の名前の章で1つずつ紹介します。
「アプリ追加後」は、すでに GitHub Desktop アプリに追加済みのリポジトリの作業ディレクトリでファイルを追加/変更したことを表しています。
「アプリ追加前」は、作業ディレクトリでファイルを追加/変更した後に、 GitHub Desktop アプリにリポジトリを追加したことを表しています。
「Git 管理済み」は、 Git に追加・コミットしているファイルを、 「Git 管理外」は、 Git に追加していないファイルを表します。
「差分なし」は、 Git の現在のコミットとの差分がない作業ディレクトリのファイルを、「差分あり」は差分のあるファイルを表します。
「CRLF」または「LF」は、そのテキストの改行コードです。
アプリ追加後の Git 管理済み、差分なし、CRLF → 警告なし
作業ディレクトリに現在のコミットとの差分がない状態でリポジトリを読み込んだ結果、改行コードについての警告は表示されませんでした。

アプリ追加後の Git 管理済み、差分あり、CRLF → 警告なし
a.txt に2行追加して保存すると、a.txt の差分がすぐに検出されました。
しかし、警告メッセージは表示されません。

アプリ追加前の Git 管理済み、差分あり、CRLF → 警告なし
作業ディレクトリの a.txt に差分がある状態のフォルダ全体をコピーして RepoAutoCRLF2 フォルダを作成して、それを GitHub Desktop アプリのリポジトリの管理に差分のある状態で追加します。

リポジトリに追加した時点で、テキストファイル(複数行)に、差分がある場合でも、警告メッセージは表示されませんでした。

アプリ追加後の Git 管理外、差分なし、CRLF → 警告なし
そのリポジトリの作業ディレクトリに c.md という複数行を保存したテキストファイルを作成しました。
これは、Git 管理に追加・コミットをしていない Git 管理外のファイルです。

Git 管理外の c.md ファイルは、追加の候補として GitHub Desktop アプリのリストにすぐに検出され、差分(追加前なので全行の追加)も表示されました。
しかし、警告メッセージは表示されませんでした。

アプリ追加前の Git 管理外、差分なし、CRLF → 警告なし
次に、この管理外のファイルを、 GitHub Desktop アプリの管理に追加した時点で検出したらどうなるかを確認します。
さきほどの c.md (Git 管理外のテキストファイル)をもった RepoAutoCRLF2 フォルダをコピーして、RepoAutoCRLF3 フォルダを作成して、それを GitHub Desktop アプリのリポジトリの管理に追加します。

GitHub Desktop アプリの管理に追加した時点で、追加の候補として c.md が検出されて、差分も表示されました。
しかし、警告メッセージは表示されませんでした。
以下のように、警告メッセージが表示されたファイルと条件を同じにしたのですが、警告メッセージは表示されませんでした。
- GitHub Desktop アプリの管理に追加した時点で、差分が検出されるファイル。
- 同じ md 形式。内容も複数行のテキストファイル。
- Git 管理外で、Git 追加候補のファイル。

このことから、GitHub Desktop アプリの仕様、おそらくは差分のツールの仕様によって、より細かな条件を満たさないと、警告メッセージは、表示されないことがわかりました。
本記事では、これ以上、この警告メッセージの発生条件を調べませんが、調べた結果が何かの参考になるかもしれないので、記述しました。
この検証のまとめ
テキストファイル(改行有り、改行無し)、バイナリファイルの差分情報を切り替えると、警告メッセージの表示が切り替わるため、この警告メッセージは、リポジトリ全体ではなく、選択中のファイルの差分について警告していると推測できました。
また、以下の条件の組み合わせのファイルでは警告が表示されないことがわかりました。
GitHub Desktop にリポジトリを追加後の操作か | ファイルを Git で管理しているか | ファイルに Git の差分はあるか | ファイルの改行コード | 警告の有無 |
アプリ追加後 | Git 管理済み | 差分なし | CRLF | 警告なし |
アプリ追加後 | Git 管理済み | 差分あり | CRLF | 警告なし |
アプリ追加前 | Git 管理済み | 差分あり | CRLF | 警告なし |
アプリ追加後 | Git 管理外 | 差分なし | CRLF | 警告なし |
アプリ追加前 | Git 管理外 | 差分なし | CRLF | 警告なし |
今回はここまで
今回は、 GitHub Desktop アプリに表示された、改行コードに関する警告メッセージと、それが発生する条件を絞り込むために行ったサンプルリポジトリの各結果を紹介しました。
次回は、今回の結果を踏まえて、警告メッセージがでるパターンとその対策について紹介します。
参照サイト Thank You!
- Git
- GitHub Japan | GitHub
- GitHub Desktop | Simple collaboration from your desktop
- Git – git-config Documentation
- Git – Git の設定
- This diff contains a change in line endings from ‘LF’ to ‘CRLF’. · Issue #18225 · desktop/desktop
記事一覧 → Compota-Soft-Press
コメント