如何让 Windows 单独保留可执行位?

Hub*_*bro 7 windows git

不幸的是,我有时被迫在 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 甚至不会让我在没有首先“提交我的更改”的情况下弹出我的藏匿处。

有人可以帮忙吗?

Hub*_*bro 9

做完之后:

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)