Git忽略gitconfig?

9 git chmod git-config

看来Git无视 ~/.gitconfig

$ git config --global core.filemode false

$ git config -l
core.filemode=false
core.filemode=true
Run Code Online (Sandbox Code Playgroud)

所以现在有2个条目core.filemode,git仍然没有忽略filemode的变化

$ 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
Run Code Online (Sandbox Code Playgroud)

根据torek的回答,我将这一行添加到了我的.bash_profile

[ -d .git ] && git config core.filemode false
Run Code Online (Sandbox Code Playgroud)

tor*_*rek 15

创建或重新初始化新仓库时,git init始终core.filemode根据探测文件系统的结果设置新值.你只需要手动:

git config core.filemode false
Run Code Online (Sandbox Code Playgroud)

要么:

git config --unset core.filemode
Run Code Online (Sandbox Code Playgroud)

使它尊重你的那个~/.gitconfig.如果git init再次运行,则per-repo设置将返回到true您的系统.

  • 不完全确定git是如何实现它的.我必须深入研究源代码.啊,它是:它取决于git构建时配置项`NO_TRUSTABLE_FILEMODE`.如果没有定义,那么它会在运行时通过chmoding` .git/config`进行测试,它最终将替换为`.git/config.lock`,它会清除它的临时chmod.临时版本设置了u + x位; 如果它在chmod之后保持设置,git认为x位很重要. (3认同)
  • 谢谢,我知道 `git config --global core.fileMode false` 是没用的。git fileMode 问题我每天都会遇到。每次创建新项目时我都必须配置这些东西。 (3认同)

Zer*_*roG 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
Run Code Online (Sandbox Code Playgroud)

然后将这样的内容添加到 .bashrc 中:

export PATH=/home/[username]/git/inst/bin:$PATH
Run Code Online (Sandbox Code Playgroud)

当然,除非您在 Cygwin 中安装了所有构建依赖项,否则该构建将无法工作。经过一番摸索,我没有遇到太多麻烦就做到了。现在,该系统上的 git init 和 git clone 默认文件模式为 false。诀窍是为构建定义 NO_TRUSTABLE_FILEMODE。