# Gitで1行しか変更していないはずのに全行変更した判定になってしまう URL: https://webrandum.net/git-diff-all-lines/ 公開日: 2023-02-08 更新日: 2023-02-08 カテゴリー: コーディング タグ: Git 出典: Webrandum(著者: サイトウ マサカズ) Gitで1行しか変更していないはずなのに、全行変更した判定になってしまうことがあります。 これは、改行コードの違いが原因のようです。 わざわざテキストエディタで改行コードを変更する場合は少ないですが、下記のようにファイルを持ってきて反映することは仕事で発生してしまいます。 - FTPソフトでサーバーからファイルをダウンロードして差分を見ようとしたとき - 他の人からもらったファイルをGitに反映しようとしたとき このような作業は、特に複数の会社が関わって共通のファイルをさわっている場合に発生しやすいです。 「本当にサーバーに上がっているファイルとGitで管理しているファイルに差分がないか確認してから作業するために、サーバーからファイルをダウンロードしてGitに反映してから作業する」「他の会社がファイルを編集して、社内Gitに反映するために編集したファイルをもらって反映する」などなど… 反映が必要なのはもちろんですが、全行変更したことになってしまっては、差分管理の意味がありません。 ## 改行コードの設定を確認する 下記のコードを実行すると、現状の改行コード設定が確認できます。 ``` git config --global core.autocrlf ``` 設定は「true」「input」「false」の3つがあって、先ほどのコマンドの最後に設定値を入力すれば設定変更できます。 ``` git config --global core.autocrlf input ``` | 設定 | チェックアウト時の動作 | コミット時の動作 | | --- | --- | --- | | true | 「CRLF」に変換する | 「LF」に変換する | | --- | --- | --- | | input | 元の改行コードのまま | 「LF」に変換する | | --- | --- | --- | | false | 元の改行コードのまま | 元の改行コードのまま | | --- | --- | --- | 勝手に変更されてしまうのは困る場合があるので「false」にするか、もしくは「input」にしておくのがよさそうです。 ただ、こういう設定は自分だけ話ではないので、チーム全体で認識を合わせておく必要があります。 ## ファイル権限が原因の可能性もある 改行コードだけでなく、ファイル権限が変更された場合も別ファイルとして全行変更として感知されるみたいです。 その場合は、下記コマンドを実行すればファイル権限の変更は無視されるようになります。 ``` git config core.filemode false ```