前回に引き続き、ソースコードなどをバージョン管理しながらインターネット上で公開できるサービス「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 に変わる可能性を警告しているもので、それを了承していれば警告を無視して問題ない。
という推測と対処(無視で問題なし)に至りました。
以降は、その検証結果や公式の引用を紹介します。
前回の記事
前回までの検証で、GitHub Desktop アプリは、管理に追加したリポジトリの作業ディレクトリにある、差分ありの複数行のテキストファイルで改行コードが LF であると警告メッセージを表示すること、 CRLF に変更すると警告メッセージが表示されないことがわかりました。
Git の autocrlf 設定
Git の設定には改行コードを環境に応じて自動変換するかどうかを設定する autcrlf があります。
Windows 環境の場合、 autocrlf == true ならば、コミットする際の改行コードは LF に、チェックアウトなどで作業ディレクトリに展開する際は CRLF に自動的に変換します。
core.autocrlf
自分が Windows で開発している一方、チームの中に Windows 以外の環境で開発している人がいる場合(逆も同様)には、改行コードの問題に巻き込まれることがありがちです。 Windows ではキャリッジリターンとラインフィードでファイルの改行を表すのですが、Mac や Linux ではラインフィードだけで改行を表すという違いが原因です。 これはささいな違いではありますが、さまざまなプラットフォームにまたがる作業では非常に面倒なものです。Windows のエディタには、LFだけの改行をだまってCRLFに置き換えたり、ユーザがEnterキーを押下した際にCRとLFの両方を挿入したりするものが数多くあります。
Git はこの問題に対処するために、コミットする際には行末の CRLF を LF に自動変換し、ファイルシステム上にチェックアウトするときには逆の変換を行うようにできます。 この機能を使うには
core.autocrlf
を設定します。Windows で作業をするときにこれを
true
に設定すると、コードをチェックアウトするときに行末の LF を CRLF に自動変換してくれます。$ git config --global core.autocrlf true
Linux や Mac などの行末に LF を使うシステムで作業をしている場合は、Git にチェックアウト時の自動変換をされてしまうと困ります。しかし、行末が CRLF なファイルが紛れ込んでしまった場合には Git に自動修正してもらいたいものです。 コミット時の CRLF から LF への変換はさせたいけれどもそれ以外の自動変換が不要な場合は、
core.autocrlf
を input に設定します。$ git config --global core.autocrlf input
この設定は、Windows にチェックアウトしたときの CRLF への変換は行いますが、Mac や Linux へのチェックアウト時は LF のままにします。
Windows のみのプロジェクトで作業をしているのなら、この機能を無効にしてキャリッジリターンをそのままリポジトリに記録してもよいでしょう。その場合は、値
false
を設定します。Git – Git の設定$ git config --global core.autocrlf false
これは Windows 環境では改行コードに CRLF を使うことが多いための配慮だと思います。
GitHub Desktop アプリでは、この自動変換で、作業ディレクトリのファイルの改行コードが LF から CRLF に変わる可能性を警告しているのではないかと推測しました。
今回は、この Git の autocrlf 設定を変更して、自動変換を無効にした際に、警告メッセージが出るかどうかを検証します。
Git の改行コード自動変換 (autocrlf) の設定の確認
autocrlf の設定は git config コマンドで確認・編集できます。
You can query/set/replace/unset options with this command. The name is actually the section and the key separated by a dot, and the value will be escaped.
このコマンドを使用して、オプションを照会/設定/置換/設定解除できます。名前は実際にはドットで区切られたセクションとキーであり、値はエスケープされます。
When reading, the values are read from the system, global and repository local configuration files by default, and options
--system
,--global
,--local
,--worktree
and--file <filename>
can be used to tell the command to read from only that location (see FILES).読み取りの場合、値はデフォルトでシステム、グローバル、およびリポジトリのローカル構成ファイルから読み取られます。また、オプション –system、–global、–local、–worktree、および –file を使用して、その場所からのみ読み取るようにコマンドに指示できます (「ファイル」を参照)。
Git – git-config Documentation と Google 翻訳
実際に、.git フォルダのある作業ディレクトリに移動して git config コマンドで以下のように確認すると、autocrlf (改行コードの自動変換)が true (有効)であることがわかりました。
G:\Dev\StudyTortoiseGit\RepoAutoCRLF5>git config --system core.autocrlf
true
G:\Dev\StudyTortoiseGit\RepoAutoCRLF5>git config --global core.autocrlf
G:\Dev\StudyTortoiseGit\RepoAutoCRLF5>git config --local core.autocrlf
G:\Dev\StudyTortoiseGit\RepoAutoCRLF5>git config --get core.autocrlf
true
上記の最後のコマンドのように、–system などを指定せずに get で core.autocrlf を取得すると、現在のリポジトリで適用される値が取得できます。
get
Emits the value of the specified key. If key is present multiple times in the configuration, emits the last value. If
--all
is specified, emits all values associated with key. Returns error code 1 if key is not present.指定されたキーの値を出力します。キーが構成内に複数回存在する場合、最後の値を出力します。 –all が指定されている場合は、キーに関連付けられたすべての値を出力します。キーが存在しない場合は、エラー コード 1 を返します。
Git – git-config Documentation と Google 翻訳
設定を変更するには、 set オプションを指定します。
※ git config –local core.autocrlf false は、古い構文なので、 –set を用いた方が良いかもしれません。
set
Set value for one or more config options. By default, this command refuses to write multi-valued config options. Passing
--all
will replace all multi-valued config options with the new value, whereas--value=
will replace all config options whose values match the given pattern.1 つ以上の構成オプションの値を設定します。デフォルトでは、このコマンドは複数値の構成オプションの書き込みを拒否します。 –all を渡すと、すべての複数値の設定オプションが新しい値に置き換えられ、–value= を渡すと、値が指定されたパターンに一致するすべての設定オプションが置き換えられます。
Git – git-config Documentation と Google 翻訳
今回は、ローカル(このリポジトリにのみ影響)の autocrlf の設定を false にして、このリポジトリの改行コードの自動変換を有効から無効に変更しました。
G:\Dev\StudyTortoiseGit\RepoAutoCRLF5>git config set --local core.autocrlf false
G:\Dev\StudyTortoiseGit\RepoAutoCRLF5>git config --local core.autocrlf
false
G:\Dev\StudyTortoiseGit\RepoAutoCRLF5>git config --get core.autocrlf
false
autocrlf を false (改行コードの自動変換を無効)にしたリポジトリを GitHub Desktop アプリに追加します。

そうすると、前回の検証で警告メッセージが表示されていた、改行コードが LF の複数行のテキストファイルで、警告メッセージが表示されなくなりました。

この検証のまとめ
警告メッセージは、Windows 環境で改行コードの自動変換を行う、 Git の core.autocrlf 設定が true (有効) な場合に、改行コード LF を含むテキストファイルの差分を GitHub Desktop アプリで表示する際に出ることがわかりました。
推測と警告メッセージへの対処例
検証結果から、
GitHub Desktop アプリでは、この自動変換で、作業ディレクトリのファイルの改行コードが LF から CRLF に変わる可能性を警告している
と推測しました。
対処例は、作業ディレクトリのファイルの改行コードが LF から CRLF に変わっても問題ない場合は、無視することにしました。
Git config の項目の消去
今回設定した、 local の core.autocrlf 項目を、未設定の状態に戻す手順については以下の記事を参照してください。
まとめ
全3話で、ソースコードなどをバージョン管理しながらインターネット上で公開できるサービス「GitHub」を GUI で操作する無料のアプリ「GitHub Desktop」の管理に、ローカルの Git リポジトリを追加した際に表示される改行コードに関する警告について、検証と推測、その結果としての対処例を紹介しました。
参照サイト 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
コメント