Answers:
在我看来,这似乎是unix文件许可权模式(755
= rwxr-xr-x
,644
= rw-r--r--
)-旧模式包括+ x(可执行)标志,新模式则没有。
此msysgit问题的答复建议将core.filemode设置为false,以消除该问题:
git config core.filemode false
git config --global ...
在全局配置文件中设置选项。
设置core.filemode
为false确实可以,但是请确保中的设置~/.gitconfig
不会被中的设置覆盖.git/config
。
~/.gitconfig
文件!
git config --list --show-origin | sls filemode
或在Linux上git config --list --show-origin | grep filemode
。这将显示您需要进行调整的地方。
当从旧硬盘驱动器复制带有工作文件的git repo几次时,遇到了这个问题。问题源于所有者和权限从旧驱动器/计算机更改为新驱动器/计算机的事实。总而言之,请运行以下命令以理顺一切(由于此超级用户的回答):
sudo chmod -R -x . # remove the executable bit from all files
前一个命令实际上将解决git diff报告的差异,但是将撤消您列出目录的功能,因此ls ./
失败ls: .: Permission denied
。要解决此问题:
sudo chmod -R +X . # add the executable bit only for directories
坏消息是,如果您有任何要保留可执行文件的文件(例如.sh
脚本),则需要还原这些文件。您可以使用以下命令为每个文件执行此操作:
chmod +x ./build.sh # where build.sh is the file you want to make executable again
git config core.filemode
其设置为true
,否则将不会检测到权限更改。我还需要在每次更改后刷新git索引以将其选中。
您可以尝试git reset --hard HEAD将存储库重置为预期的默认状态。
git reset --hard HEAD
对我来说效果很好。谢谢
我也遇到过同样的问题。这可以挽救我的生命:https : //gist.github.com/jtdp/5443498
git diff -p -R --no-color \
| grep -E "^(diff|(old|new) mode)" --color=never \
| git apply`
与分支机构进行区分时,我只是遇到了这个问题。当我期望我的分支与master相同时,Git返回了一个“模式”错误。我通过删除文件然后重新合并master来进行修复。
首先,我运行了差异:
git checkout my-branch
git diff master
这返回:
diff --git a/bin/script.sh b/bin/script.sh
old mode 100755
new mode 100644
然后,我运行以下命令进行修复:
rm bin/script.sh
git merge -X theirs master
此后,git diff
我的分支机构和主分支之间没有任何区别。
git update-index --chmod=(+|-)x <path>
。