近期在做ffmpeg版本合並時發現,TortoiseGit的Check for Modifications的修改對話框中有未修改的問題,直接導出diff,會有類似下面的輸出:
compat/plan9/head | 0
diff --git a/compat/plan9/head b/compat/plan9/head
old mode 100755
new mode 100644
但修改行和添加行都是0,搜索查找發現,主要問題是由於文件權限問題。
由於在windows下沒有對應數字的文件權限,而在*nix中確有,上面的數字含義755=rwxrw_rw_, 644=rw_r__r__
,而100表示文件。
由於直接從linux到windows下clone,相關權限信息可能丟失。
解決方法如下:
- 命令行下使用
git config core.filemode false
- 通過TortoiseGit的Setting配置
右鍵-TortoiseGit-Settings,選擇左側列表框中的Git,然后在右側對話框中選擇Edit Local .git/config
將下面配置項修改(filemode 改為 false)
[core]
filemode = false
- 直接修改代碼倉庫 .git 目錄里的 config 文件的 filemode (在 [core] 段中)字段,將其改為 false。
如果要全局修改的話,加 --global 選項:
git config --global core.filemode false
或者通過TortoiseGit配置。
core.fileMode
If false, the executable bit differences between the index and the
working copy are ignored; useful on broken filesystems like FAT.
See git-update-index(1). True by default.
通過上面修改之后,在命令行中調用git diff輸出的patch是正常的,但是在TortoiseGit的修改對話框中可能還是不對,如果一定要解決,建議把當前代碼修改備份下,重新pull一份就可以了。