リモートリポジトリ上で変更していないファイルに差分が出てしまう場合の対処


結論

エディタの設定によって改行コード・ファイル末尾の改行などが勝手に置換されてしまっていることが原因

パターン①

改行コードの違いが差分として検知されてしまっているパターン

前提知識

MacOS/Linuxの改行コード:LF
Windowsの改行コード:CR+LF

事例

プロジェクトメンバの使用している端末が異なることによって発生。
今回は他メンバがMacで自分がWindows。

bitbucket上のコードは改行コードがすべてLFだったが、
git cloneしてきたコードの改行コードを保存時にCR+LFに変換されていたため差分が出た。

エディタ(VSCode)の設定

core.autocrlfの項目を編集することで、任意のタイミングで改行コードの変換を行うことができる。
今回の事例ではbitbucketにpushするときにLFになっていればいいのでtrue/inputのどちらかにすればいいと考えた。

core.autocrlfの設定 チェックアウト時 コミット時
true LF -> CRLF CRLF -> LF
input 変換しない CRLF -> LF
false 変換しない 変換しない

core.autocrlの設定方法

// 今の設定値の確認
git config core.autocrlf //false

// inputに設定する場合
git config --global core.autocrlf input

パターン②

ファイル末尾の空行有無が差分として検知されてしまっているパターン(何も差分がないように見える)

前提知識

ファイルの末尾は改行で終わらせるべきである。

参考:

エディタ(VSCode)の設定

settings.jsonに下記を追記することで、自動的に改行を挿入してくれる。

 "files.trimTrailingWhitespace": true, // ファイル保存時に末尾の空白をトリミングする
 "files.trimFinalNewlines": true, // ファイル保存時に最終行以降をトリミングする 
 "files.insertFinalNewline": true, // ファイル保存時に末尾に改行を挿入する