不幸的是,我有时被迫在 Windows PC 上工作。
当我检查我的项目时,git status立即说:
修改:bin/my_executable
git diff 说:
diff --git a/bin/my_executable b/bin/my_executable 旧模式 100755 新模式 100644
“哦,简单”我想。“Windows 只是剥离了可执行文件位。”
现在,在过去的 30 分钟里,我一直试图让 Git 阻止它,但我即将遇到挫折引发的动脉瘤。检出文件不起作用:
$ git checkout bin/my_executable $ git diff diff --git a/bin/my_executable b/bin/my_executable 旧模式 100755 新模式 100644
硬重置,无效:
$ git reset --hard HEAD 现在是 789abcd 我的最后一次提交文本 $ git diff diff --git a/bin/my_executable b/bin/my_executable 旧模式 100755 新模式 100644
在 usinggit update-index上切换可执行位不起作用:
$ git update-index --chmod=+x bin/my_executable $ git diff diff --git a/bin/my_executable b/bin/my_executable 旧模式 100755 新模式 100644 $ git checkout bin/my_executable $ git diff diff --git a/bin/my_executable b/bin/my_executable 旧模式 100755 新模式 100644
要求 Git 忽略可执行位更改不起作用:
$ git config --global core.fileMode false $ git diff diff --git a/bin/my_executable b/bin/my_executable 旧模式 100755 新模式 100644 $ git checkout bin/my_executable $ git diff diff --git a/bin/my_executable b/bin/my_executable 旧模式 100755 新模式 100644
这是一个完整的拦截器。Git 甚至不会让我在没有首先“提交我的更改”的情况下弹出我的藏匿处。
有人可以帮忙吗?
做完之后:
git config --list
Run Code Online (Sandbox Code Playgroud)
我注意到core.fileMode在本地设置为 true 。我不知道这是怎么发生的,但这可能与项目目录在 Windows 和 Linux PC 之间同步的事实有关。不过,我多年来一直使用此工作流程,但从未发生过这种情况。
简而言之,这解决了我的问题:
git config --unset core.fileMode
Run Code Online (Sandbox Code Playgroud)
编辑:根据对此答案的评论,简单地取消设置core.fileMode不再足够,因为默认值已更改为true. 我无法验证这一点,因为我不再使用 Windows 进行开发,但如果是这种情况,您可以手动将其设置为 false:
git config core.fileMode false
Run Code Online (Sandbox Code Playgroud)