git - 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 缓存中的某个位置,并且无法通过任何类型的文件模式更改来忽略权限。
解决方案
更新:问题现已修改;这就是我认为真正的答案是:
- 您的文件系统实际上并不支持模式。
- 你确实在某个时候设置
core.filemode
了。true
- 这让 Git 相信了
lstat
调用的结果。这更新了一堆索引条目mode 100755
(可能)。 - 这反过来又让 Git 使用错误的模式进行提交。
- 之后,您修复
core.filemode
了(将其放回false
)并且可能还更新了 Git 的索引(请注意,Git 的索引保留了其中设置的任何 +x 或 -x 设置,无论这是否来自信任lstat
--and-seeing--x
bits -in-the-working-tree,或者 fromgit 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
。 必须这样做表明您系统上的其他东西行为不端。你应该改正另一件事。
推荐阅读
- python - Python Regex 仅用于第一个匹配项并忽略其他匹配项
- python - requirements.txt:以 python 版本为条件
- angular - 自动将前端应用程序的标头附加到外部http请求?
- vb.net - 创建命令以搜索现有用户的 Excel 数据库(在带有 Windows 窗体的 Visual Basic 上使用 OleDb)
- grep - 如何从字符串中捕获(grep / awk / sed)子字符串shell中的值
- api - 如何解决:解包的值太多
- javascript - 这是分配 JS 点击事件的有效语句
- sqlite - SQLite replace() 指定字符和下一个字符
- java - JavaFX 通讯簿更新具有相同信息的联系人 (SQL)
- ios - 故事板/布局信息在哪里写入?