Gitトラブルメモ¶
ファイルのパーミッションが違うために変更と扱われる¶
ファイルの内容は変更がないのに、変更ありとGitに判定されます。主にWindows上のGit for WindowsやCygwin gitで発生します。
work$ git status -s A libs/butterknife-7.0.1.jar M src/main/java/com/torutk/android/notepad/InputActivity.java work$
差分を見ようとすると
work$ git diff diff --git a/app/src/main/java/com/torutk/android/notepad/InputActivity.java b/app/src/main/java/com/torutk/android/notepad/InputActivity.java old mode 100644 new mode 100755 work$
と、ファイルのパーミッションが違うと(だけ)出てきます。
回避策¶
使用しているリポジトリの設定項目 core.filemode をfalseに設定します。
$ git config core.filemode false
--global
で設定しても効きませんでした。これは、gitリポジトリ作成時にcore.filemodeを参照してリポジトリ設定として書き込まれるため、それ以降globalな設定を変更しても既に作られたリポジトリの固有設定が優先されるためです。
また、これ以後作成するリポジトリをfilemode=falseにするため、--global
の設定もしておきます。
$ git config --global core.filemode false
git diff で差分行の表示の末尾に^Mが付く¶
])
+ filteringCharset = 'UTF-8'^M
filter(EscapeUnicode)
改行コードがCR+LFのファイルを変更してdiffを見るとこのようになります。gitが認識する改行コード(LF)の前にgitが空白扱いしているCRが表われているため、このような表示となります。
回避策¶
core.whitespace設定に、LFの前にCRが許容できるcr-at-eolを指定します。
> git config --global core.whitespace cr-at-eol