首页 > 解决方案 > git config core.filemode false 不工作 git 2.25.1

问题描述

我阅读了这个解决方案如何让 Git 忽略文件模式 (chmod) 更改?并尝试了其他一些事情,但以下情况不断发生:

当我做

git status -v

表明

diff --git a/video.html b/video.html
old mode 100644
new mode 100755

所以它正在获取文件权限的更改,但是当我运行以下命令使其忽略文件更改时

git config core.filemode false

它仍然可以看到变化。我做错了什么或误解了文件模式的工作原理吗?

我还尝试更改全局 git 设置,修改 .git/config 文件等以将文件模式设置为 false,但没有任何效果,它仍然可以看到更改。

通过 git update-index 手动更改权限

我现在发现的唯一解决方法是转到 repo 文件夹并git update-index --chmod=-x FILENAME使用递归方法执行类似的操作

git ls-files --stage | grep 100755 | cut -f2 | xargs git update-index --chmod=-x

但不幸的是,这并没有涵盖所有文件

“解决方案”

最后不得不从主人那里做一个硬重置来解决这个问题。认为问题是我在执行之前提交了具有更改权限的文件,git config core.filemode false一旦提交,我假设它位于 git 缓存中的某个位置,并且无法通过任何类型的文件模式更改来忽略权限。

标签: git

解决方案


更新:问题现已修改;这就是我认为真正的答案是:

  • 您的文件系统实际上并不支持模式。
  • 你确实在某个时候设置core.filemode了。true
  • 这让 Git 相信了lstat调用的结果。这更新了一堆索引条目mode 100755(可能)。
  • 这反过来又让 Git 使用错误的模式进行提交。
  • 之后,您修复core.filemode了(将其放回false)并且可能还更新了 Git 的索引(请注意,Git 的索引保留了其中设置的任何 +x 或 -x 设置无论这是否来自信任lstat--and-seeing-- xbits -in-the-working-tree,或者 from git update-index --chmod,或者其他什么,直到一些其他操作出现并更新 Git 的索引)。

一旦事情变得混乱,修复也往往会变得混乱。

下面的原始答案。


git config core.filemode 表示 git config --get core.filemode,即告诉我core.filemode设置为 的内容。它不会更改设置。

如您链接到的问题的已接受答案中所述,设置它的命令是:

git config core.filemode false

(如果你愿意,你可以拼写core.filemode部分或全部大写;Git 的这一特殊位不区分大小写)。 但是,一般来说,您根本不应该设置 core.filemode 必须这样做表明您系统上的其他东西行为不端。你应该改正另一件事。


推荐阅读