プロジェクト

全般

プロフィール

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


約3年前に更新