我有一个项目,在开发时,我必须将chmod文件的模式更改为777,但在主库中不应更改。
Git拿起了chmod-R777。并将所有文件标记为已更改。有没有办法让Git忽略对文件所做的模式更改?
我有一个项目,在开发时,我必须将chmod文件的模式更改为777,但在主库中不应更改。
Git拿起了chmod-R777。并将所有文件标记为已更改。有没有办法让Git忽略对文件所做的模式更改?
当前回答
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,除非在非常罕见的环境中。
其他回答
如果要为所有回购设置此选项,请使用--global选项。
git config --global core.filemode false
如果这不起作用,您可能使用的是更新版本的git,所以请尝试--add选项。
git config --add --global core.filemode false
如果在没有--global选项的情况下运行它,并且工作目录不是repo
error: could not lock config file .git/config: No such file or directory
撤消工作树中的模式更改:
git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -d'\n' chmod +x
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -d'\n' chmod -x
或以明吉计
git diff --summary | grep 'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -e'\n' chmod +x
git diff --summary | grep 'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -e'\n' chmod -x
或在BSD/macOS中
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | tr '\n' '\0' | xargs -0 chmod -x
git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | tr '\n' '\0' | xargs -0 chmod -x
通过定义以下别名(在~/.gitconfig中),您可以轻松地临时禁用fileMode per git命令:
[alias]
nfm = "!f(){ git -c core.fileMode=false $@; };f"
如果在git命令前面加上此别名,则文件模式更改不会显示在其他命令中。例如:
git nfm status
这可能有效: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,除非在非常罕见的环境中。