Git忽略gitconfig文件?

16

看起来 Git 忽略了 ~/.gitconfig

$ git config --global core.filemode false

$ git config -l
core.filemode=false
core.filemode=true

现在有2个关于 core.filemode 的条目,而git仍然没有忽略文件模式的更改。

$ touch modetest

$ git add .

$ git commit -m test1
[master (root-commit) 320cfe4] test1
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 modetest

$ chmod +x modetest

$ git diff
diff --git a/modetest b/modetest
old mode 100644
new mode 100755

根据torek的答案,我将这一行添加到我的.bash_profile中。

[ -d .git ] && git config core.filemode false
3个回答

16

在创建或重新初始化一个新存储库时,git init 总是基于探测文件系统的结果来设置 core.filemode 的新值。你只需要手动执行以下操作:

git config core.filemode false

或者:

git config --unset core.filemode

要使其遵循您的~/.gitconfig中的设置。 如果您再次运行git init,则每个存储库的设置将返回为true


4
不完全确定git实际上是如何实现它的。我得去挖掘源代码才行。啊,这里有:它取决于git的构建时间配置项NO_TRUSTABLE_FILEMODE。如果未定义,则在运行时进行测试,通过对.git/config进行chmod,最终用.git/config.lock替换它,并清除其临时chmod。临时版本设置了u+x位;如果在chmod之后它保持设置,则git认为x位很重要。 - torek
这很有道理,但仍然令人沮丧,我不得不将一个项目从一台计算机复制到另一台计算机5次,直到我意识到发生了什么)) 谢谢! - Eugene Kuzmenko
3
谢谢,我知道 git config --global core.fileMode false 没有用。Git 文件模式问题我每天都会遇到。每次创建新项目时都必须配置这个东西。 - bronze man
在我的情况下,情况恰好相反。克隆之后,本地的.git/config文件包含:[core] filemode = false。有任何想法为什么它确定应该是false(在Windows 10上使用git bash for windows)? - u123
@u123:Git的测试是:如果.git/config文件权限为-x,则将其更改为+ x,如果它是+x,则更改为-x。然后检查更改是否实际生效。如果是,则新替换的.git/config.lock文件获取filemode = true行。如果没有,则新替换的.git/config.lock文件获取filemode = false行。配置完成后,将.git/config.log重命名为.git/config并设置新的文件模式设置。 - torek
显示剩余2条评论

4
也许有点过度,但在Cygwin中,这个问题困扰了我很久,所以我深入研究了一下。当git从源代码构建时,它会检查构建它的文件系统是否理解可执行位。
我在我的Cygwin系统上从源代码构建了git,并将其安装到本地目录,然后将二进制文件添加到我的路径中。基本步骤如下:
cd ~/
mkdir git
cd git
mkdir inst
git clone -c core.autocrlf=false https://github.com/git/git.git
cd git
NO_TRUSTABLE_FILEMODE=1 make prefix=/home/[username]/git/inst/
NO_TRUSTABLE_FILEMODE=1 make prefix=/home/[username]/git/inst/ install

然后在.bashrc文件中添加以下内容:

export PATH=/home/[username]/git/inst/bin:$PATH

当然,除非您在Cygwin中安装了所有构建依赖项,否则该构建将无法工作。通过一些探索,我能够不费吹灰之力地完成它。现在,在该系统上进行git init和git clone会将filemode默认设置为false。诀窍是为构建定义NO_TRUSTABLE_FILEMODE。


0

(编辑)因此,对于Windows系统,我们需要执行以下操作:

git config --global --unset core.filemode
git config --unset core.filemode
git config core.filemode false

你可以在 Git 安装目录中为新的 Git 文件夹(init)创建一个空的配置文件:

C:\bin\Git\share\git-core\templates>echo > config
C:\bin\Git\share\git-core\templates>notepad config

并放置在内:

[core]
filemode = false

即使您进行了编辑,git init 仍将返回 filemode = true - Zombo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接