如何让Git忽略文件模式(chmod)更改?

发布时间 2023-11-01 20:02:03作者: 小满独家

内容来自 DOC https://q.houxu6.top/?s=如何让Git忽略文件模式(chmod)更改?

我有一个项目,在开发过程中需要使用chmod将文件的模式更改为777,但在主仓库中不应更改。

Git检测到chmod -R 777 .并将所有文件标记为已更改。有什么方法可以让Git忽略对文件进行的模式更改?


尝试:

git config core.fileMode false

来自git-config(1):

core.fileMode
    告诉Git文件工作树中的可执行位是否应被尊重。

   某些文件系统在标记为可执行的文件检出时会丢失可执行位,或者检出一个带有可执行位的非可执行文件。git-clone(1)
或 git-init(1) 探测文件系统以查看它是否正确处理可执行位,此变量将自动根据需要设置。

    仓库可能位于正确处理文件模式的文件系统上,当创建时,此变量设置为true,但稍后可能会从另一个
   环境中访问(例如,通过CIFS挂载导出ext4,使用Git for Windows或Eclipse访问Cygwin创建的存储库)。在这种情况下,可能需要将此变量设置为false。请参阅git-update-index(1)。

   默认值为true(当core.fileMode未在配置文件中指定时)。

-c标志可用于为一次性命令设置此选项:

git -c core.fileMode=false diff

输入-c core.fileMode=false可能会很麻烦,因此您可以为所有git仓库或仅为一个git仓库设置此标志:

# 这将为您的用户在所有git仓库中设置标志(修改`$HOME/.gitconfig`)
# 警告:这将被本地配置覆盖,文件模式值将使用最新版本的git自动选择。
# 这意味着,如果您的当前文件系统被检测为兼容,它将在克隆或初始化存储库时将本地core.fileMode设置为true,无论您在全局设置中设置什么。
git config --global core.fileMode false

# 这将为一个git仓库设置标志(修改`$current_git_repo/.git/config`)
git config core.fileMode false

此外,git clonegit init在存储库配置中明确将core.fileMode设置为true,如Git global core.fileMode false overridden locally on clone中所讨论。

警告

core.fileMode不是最佳实践,应该谨慎使用。此设置仅涵盖可执行位,而永远不会涉及读/写位。在许多情况下,您认为需要此设置是因为您像chmod -R 777这样做了,使所有文件可执行。但在大多数项目中大多数文件不需要也不应该出于安全原因而被执行

解决此类情况的正确方法是单独处理文件夹和文件权限,例如:

find . -type d -exec chmod a+rwx {} \; # 使文件夹可遍历和可读/写
find . -type f -exec chmod a+rw {} \;  # 使文件可读/写

如果您这样做,您将永远不需要使用core.fileMode,除了在非常罕见的环境中。