Coding Methodology
複数人作業の意外な落とし穴 改行コードの設定を再確認
2021 / 03 / 31
複数の作業者でコーディングしていると、変更箇所以外がGitに差分として表示されてしまうことはありませんか?それは、プロジェクトのGitリポジトリとご自身の開発環境の改行コード設定が異なっていることが原因かもしれません。改行コードは、WindowsではCRLF、MacではLFが標準で利用されます。そのため、各作業者のOS、エデイター、Gitの環境設定の違いによって、開発中のプロジェクトのGitリポジトリとの間で思わぬ差分が発生してしまうことがあります。今回はコマンドを利用して、改行コードの確認・変更を行う方法をご紹介します。
Gitの改行コード自動変換機能
Gitには改行コードを自動で変換するautocrlfの設定ができます。これはGitでcommitした時とclone、checkoutした時に自動的に改行コードを変換する仕組みです。
trueを設定している場合
commit時:CRLFからLFに変換
clone時、checkout時:LFからCRLFに変換
プロジェクトのGit内で管理されている改行コードがLFの場合、自動変換をONにしていると、Windowsではcloneしたリポジトリ内のコードはCRLFに変わってしまうため、想定していなかった差分が出ることがあります。
現在の設定確認の方法
方法1)
「$ git config –show-origin core.autocrlf」のコマンドを実行することで、Gitの設定のうち、改行コードの自動変換設定が確認できます(例 1-1)。
例1-1 コマンド実行結果の表示例
$ git config --show-origin core.autocrlf
file:{設定ファイルのディレクトリ}/.gitconfig true
方法2)
コマンドを使わずに、ファイル「gitconfig」からも設定内容を確認することができます(例1-2)。
例1-2 gitconfigファイル内
[core]
autocrlf = falsefile:{設定ファイルのディレクトリ}/.gitconfig true
改行コードの変更手順
手順1)git configコマンドでGitの設定を変える
$ git config[オプション]core.autocrlf falseを使います。
適用したい範囲に応じて、--system, --global, --local
を[オプション]として指定することができます(例2-1)。
なお、Gitの設定の優先される順番は、local > global > systemとなります。
例2-1コマンド使用例
//システム全体
$ git config --system core.autocrlf false
//ユーザーの全リポジトリ
$ git config --global core.autocrlf false
//対象リポジトリのみ
$ git config --local core.autocrlf false
手順2)すでに進行中のプロジェクトにあるファイルの改行コー ドを変更
- フォルダ内でCRLFになっているファイルをコマンドで確認します(コマンド1-1)。
- CRLFになっているファイルがあれば、続けて改行コードを変更します(コマンド1-2)。
- 1.を再度実行して、CRLFのファイルがなくなったことを確認します。
コマンド1-1
$ find . -type f | xargs file | grep CRLF
コマンド1-2
$ find . -type f | xargs file | grep CRLF | awk -F: '{print $1}' | xargs dos2unix
上記のようにコマンドを使用する以外にも、エディターやGUI(Gitクライアントツール)などで設定を変更する方法があります。
意外と忘れがちな「改行コード」、この機会に改めて確認してみてはいかがでしょうか。