我尝试更改 git 配置,但它不会更改。相反,它显示了两个设置?!
I tried to change a git config, but it won't change. Instead it shows both settings ?!
当我做的时候
git config --list
我明白了
core.filemode=true
我也是
git config --global core.filemode false
现在当我列出我得到的配置时
core.filemode=false
core.filemode=true
这是什么意思?以及如何才能成功将其更改为 false only
编辑:git config --list --show-origin
表明
file:/home/me/.gitconfig core.filemode=false
file:.git/config core.filemode=true
那是哪一个?
Git 支持本地和全局配置。本地配置优先于全局配置。参见
file:/home/me/.gitconfig core.filemode=false # Your Global Config
file:.git/config core.filemode=true # Your Local Config
来自 Git 配置页:
Finally, Git looks for configuration values in the configuration file
in the Git directory (.git/config) of whatever repository you’re
currently using. These values are specific to that single repository,
and represent passing the --local option to git config. If you don’t
specify which level you want to work with, this is the default.
https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
因此,要为您的存储库将其设置为 false,只需设置:
git config --local core.filemode false
请注意,您还可以在您选择的任何编辑器中像编辑普通文件一样编辑.git/config
。
线索在--global
标志中。在您的主目录中有一个全局的 .gitconfig
,在回购协议中有一个可选的本地目录。这就是 --show-origin
向您展示的内容。
正如在所有此类 global/local 配置系统中所期望的那样,对于所有重叠的设置,本地系统将覆盖全局系统。
如果您希望 core.filemode
为假,您有三个选项(即只执行其中之一):
通过执行与之前相同的命令但不使用 --global
:
,在 repo 本地配置中将其设置为 false
git config core.filemode false
之所以可行,是因为默认情况下新设置是在本地进行的。
如果您不希望有本地设置,您可能有
过去遗漏 --global
不小心创建了这个文件。
在 repo 本地配置中取消设置,以便应用全局配置:
git config --unset core.filemode
如果不需要本地设置,只需要全局设置,请删除 repo 本地配置。或者为了安全起见,将文件重命名为其他名称,直到您确定其中没有您需要的任何内容 - 如果这样做,您可以将这些设置复制到全局(如果合适的话)。
ℹ️ I included this option for completeness. But there are almost always repo-specific values, e.g. configuration of remotes and remote tracking branches, so it you probably should use option 2 for settings that should defer to your global config.
and 都提到了重复的原因——也就是说,该设置现在同时存在于全局 .gitconfig
和本地 .git/config
文件中,而且更本地化的文件设置会覆盖更全局的设置。
这里还有另外两个有趣的地方。一个特定于 core.filemode
(又名 core.fileMode
;the git config
documentation 两种方式拼写)。另一个通常适用于某些 Git 配置设置。
当 Git 命令启动时,它会读取尽可能多的 Git 配置文件。至少有三个标准集:系统范围的配置,通常在 /etc/gitconfig
或 /usr/local/etc/gitconfig
中,然后是您自己的全局文件,通常在 $HOME/.gitconfig
或 [=18= 中] 或类似的,最后是 .git/config
中的每个存储库配置。 大多数设置仅保留最后一个值,因此如果/etc/gitconfig
设置color.grep.filename = red
,但您的全局文件设置color.grep.filename = blue
、git grep
文件名将显示为蓝色——除非您的本地文件再次覆盖它。如果您的本地文件中有多个 条目 ,最后一个将被覆盖。
一些Git设置,但是,积累。例如,在正常(完整)克隆中,remote.origin.fetch
通常在您的本地 .git/config
中设置为 +refs/heads/*:refs/remotes/origin/*
。但是,单分支克隆会将此设置为 +refs/heads/somebranch:refs/remotes/origin/somebranch
。这就是使克隆首先成为单分支克隆的原因。使用 git remote set-branches --add
,您可以一个接一个地添加 个单独的分支 ;每个都添加 一个 remote.origin.fetch
条目。
无论哪个文件包含该设置,这种累积都适用。这意味着可以设置 Git 以使用全局 Git 配置文件中的 fetch
设置复制所有 GitHub 拉取请求。 (我不 推荐 这个——它积累了很多废话,例如——但它是 可能的 。)
最后,让我们注意 core.filemode
控制 Git 是否相信对工作树中的文件执行的 chmod +x
和 chmod -x
操作应该被复制回当您 运行 git add
时,Git 索引中的条目。对于 new 文件,它控制 lstat
system call 结果中的 x
位是否使此 Git 索引条目成为 mode 100755
(+x)或 mode 100644
(-x)。 Git 在您使用 git init
或 git clone
创建新存储库时设置此项 根据您的操作系统的行为以及在其中创建存储库的文件系统。 更改设置对于某些特殊情况可能很有用,但通常是不明智的:非常确定您知道自己在做什么。
当我做的时候
git config --list
我明白了
core.filemode=true
我也是
git config --global core.filemode false
现在当我列出我得到的配置时
core.filemode=false
core.filemode=true
这是什么意思?以及如何才能成功将其更改为 false only
编辑:git config --list --show-origin
表明
file:/home/me/.gitconfig core.filemode=false
file:.git/config core.filemode=true
那是哪一个?
Git 支持本地和全局配置。本地配置优先于全局配置。参见
file:/home/me/.gitconfig core.filemode=false # Your Global Config
file:.git/config core.filemode=true # Your Local Config
来自 Git 配置页:
Finally, Git looks for configuration values in the configuration file in the Git directory (.git/config) of whatever repository you’re currently using. These values are specific to that single repository, and represent passing the --local option to git config. If you don’t specify which level you want to work with, this is the default. https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
因此,要为您的存储库将其设置为 false,只需设置:
git config --local core.filemode false
请注意,您还可以在您选择的任何编辑器中像编辑普通文件一样编辑.git/config
。
线索在--global
标志中。在您的主目录中有一个全局的 .gitconfig
,在回购协议中有一个可选的本地目录。这就是 --show-origin
向您展示的内容。
正如在所有此类 global/local 配置系统中所期望的那样,对于所有重叠的设置,本地系统将覆盖全局系统。
如果您希望 core.filemode
为假,您有三个选项(即只执行其中之一):
通过执行与之前相同的命令但不使用
,在 repo 本地配置中将其设置为 false--global
:git config core.filemode false
之所以可行,是因为默认情况下新设置是在本地进行的。 如果您不希望有本地设置,您可能有 过去遗漏
--global
不小心创建了这个文件。在 repo 本地配置中取消设置,以便应用全局配置:
git config --unset core.filemode
如果不需要本地设置,只需要全局设置,请删除 repo 本地配置。或者为了安全起见,将文件重命名为其他名称,直到您确定其中没有您需要的任何内容 - 如果这样做,您可以将这些设置复制到全局(如果合适的话)。
ℹ️ I included this option for completeness. But there are almost always repo-specific values, e.g. configuration of remotes and remote tracking branches, so it you probably should use option 2 for settings that should defer to your global config.
.gitconfig
和本地 .git/config
文件中,而且更本地化的文件设置会覆盖更全局的设置。
这里还有另外两个有趣的地方。一个特定于 core.filemode
(又名 core.fileMode
;the git config
documentation 两种方式拼写)。另一个通常适用于某些 Git 配置设置。
当 Git 命令启动时,它会读取尽可能多的 Git 配置文件。至少有三个标准集:系统范围的配置,通常在 /etc/gitconfig
或 /usr/local/etc/gitconfig
中,然后是您自己的全局文件,通常在 $HOME/.gitconfig
或 [=18= 中] 或类似的,最后是 .git/config
中的每个存储库配置。 大多数设置仅保留最后一个值,因此如果/etc/gitconfig
设置color.grep.filename = red
,但您的全局文件设置color.grep.filename = blue
、git grep
文件名将显示为蓝色——除非您的本地文件再次覆盖它。如果您的本地文件中有多个 条目 ,最后一个将被覆盖。
一些Git设置,但是,积累。例如,在正常(完整)克隆中,remote.origin.fetch
通常在您的本地 .git/config
中设置为 +refs/heads/*:refs/remotes/origin/*
。但是,单分支克隆会将此设置为 +refs/heads/somebranch:refs/remotes/origin/somebranch
。这就是使克隆首先成为单分支克隆的原因。使用 git remote set-branches --add
,您可以一个接一个地添加 个单独的分支 ;每个都添加 一个 remote.origin.fetch
条目。
无论哪个文件包含该设置,这种累积都适用。这意味着可以设置 Git 以使用全局 Git 配置文件中的 fetch
设置复制所有 GitHub 拉取请求。 (我不 推荐 这个——它积累了很多废话,例如——但它是 可能的 。)
最后,让我们注意 core.filemode
控制 Git 是否相信对工作树中的文件执行的 chmod +x
和 chmod -x
操作应该被复制回当您 运行 git add
时,Git 索引中的条目。对于 new 文件,它控制 lstat
system call 结果中的 x
位是否使此 Git 索引条目成为 mode 100755
(+x)或 mode 100644
(-x)。 Git 在您使用 git init
或 git clone
创建新存储库时设置此项 根据您的操作系统的行为以及在其中创建存储库的文件系统。 更改设置对于某些特殊情况可能很有用,但通常是不明智的:非常确定您知道自己在做什么。