我有一个项目,在开发时,我必须将chmod文件的模式更改为777,但在主库中不应更改。

Git拿起了chmod-R777。并将所有文件标记为已更改。有没有办法让Git忽略对文件所做的模式更改?


当前回答

If

git config --global core.filemode false

不适用于您,请手动执行:

cd into yourLovelyProject folder

cd到.git文件夹:

cd .git

编辑配置文件:

nano config

将true更改为false

[core]
        repositoryformatversion = 0
        filemode = true

->

[core]
        repositoryformatversion = 0
        filemode = false

保存,退出,转到上层文件夹:

cd ..

勒紧吉特

git init

你完蛋了!

其他回答

您不需要更改配置文件。

只需运行:

git diff -G.

注意,后面的点不是句子的结尾,而是匹配所有内容的正则表达式,必须包含在内。

如果设置:sudo chmod 777-R

可以运行:git-config-core.fileMode false

你可以:https://www.w3docs.com/snippets/git/how-to-make-git-ignore-file-mode-changes.html

您可以全局配置它:

git-config—全局core.filemode false

如果上述方法不适用于您,原因可能是您的本地配置覆盖了全局配置。

删除本地配置以使全局配置生效:

git-config—取消设置core.filemode

或者,您可以将本地配置更改为正确的值:

git-config-core.filemode false

Try:

git config core.fileMode false

从git-config(1):

core.fileMode(核心文件模式)告诉Git工作树中文件的可执行位是值得尊敬的。某些文件系统在标记为可执行的文件已签出,或签出.git clone(1)上具有可执行位的不可执行文件或gitinit(1)探测文件系统,看看它是否处理可执行位正确,此变量自动根据需要设置。然而,存储库可能位于处理文件模式正确,并且当创建,但以后可以从另一个失去文件模式的环境(例如,导出ext4通过CIFS装载,使用Git访问Cygwin创建的存储库对于Windows或Eclipse)。在这种情况下,可能需要将此变量设置为false。参见git更新索引(1)。默认值为true(未指定core.filemode时)在配置文件中)。

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

git -c core.fileMode=false diff

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

# this will set your the flag for your user for all git repos (modifies `$HOME/.gitconfig`)
# WARNING: this will be override by local config, fileMode value is automatically selected with latest version of git.
# This mean that if git detect your current filesystem is compatible it will set local core.fileMode to true when you clone or init a repository.
# Tool like cygwin emulation will be detected as compatible and so your local setting WILL BE SET to true no matter what you set in global setting.
git config --global core.fileMode false

# this will set the flag for one git repo (modifies `$current_git_repo/.git/config`)
git config core.fileMode false

此外,git clone和git init在repo配置中显式地将core.fileMode设置为true,正如git全局core.fileModefalse在clone上本地重写所述

警告

core.fileMode不是最佳实践,应谨慎使用。此设置仅覆盖模式的可执行位,而不覆盖读/写位。在许多情况下,您认为需要此设置,因为您做了类似chmod-R 777的操作,使所有文件都可执行。但在大多数项目中,出于安全原因,大多数文件不需要,也不应该是可执行的。

解决这种情况的正确方法是分别处理文件夹和文件权限,例如:

find . -type d -exec chmod a+rwx {} \; # Make folders traversable and read/write
find . -type f -exec chmod a+rw {} \;  # Make files read/write

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

如果要在配置文件中递归地(包括子模块)将filemode设置为false:find-name config | xargs sed-i-e's/filemode=true/filemode=false/'