协慌网

登录 贡献 社区

如何从 Git 的未分级更改中删除说 “旧模式 100755 新模式 100644” 的文件?

出于某种原因,当我最初从存储库中提取一个我的 git 项目时,我在工作副本中得到了很多文件,这些文件没有明显的更改,但仍显示在未unstaged changes区域。

我在 Windows XP 上使用 Git Gui,当我去查看文件以查看发生了什么变化时。我所看到的是:

old mode 100755  
new mode 100644

有人知道这意味着什么吗?

如何从未进行的暂存更改列表中删除这些文件? (非常烦人,必须浏览 100 多个文件,只是挑选我最近编辑并想要提交的文件)。

答案

在我看来,这似乎是 unix 文件权限模式( 755 = rwxr-xr-x644 = rw-r--r-- )- 旧模式包括 + x(可执行)标志,新模式则没有。

此 msysgit 问题的答复建议将 core.filemode 设置为 false,以消除该问题:

git config core.filemode false

core.filemode设置为 false 确实可以,但是请确保~/.gitconfig中的设置不会被.git/config的设置覆盖。

当从旧硬盘驱动器复制带有工作文件的 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