【问题标题】:Git ignoring gitconfig?Git忽略gitconfig?
【发布时间】:2012-05-09 18:04:24
【问题描述】:

Git 似乎忽略了~/.gitconfig

$ git config --global core.filemode false

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

所以现在core.filemode 有 2 个条目,并且 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’s answer,我将此行添加到我的.bash_profile

[ -d .git ] && git config core.filemode false

【问题讨论】:

    标签: git chmod git-config


    【解决方案1】:

    当创建或重新初始化一个新的 repo 时,git init 总是设置一个新的值 core.filemode 基于探测文件系统的结果。你只会 必须手动:

    git config core.filemode false
    

    或者:

    git config --unset core.filemode
    

    使其尊重您~/.gitconfig 中的内容。如果你再次运行git init 每个 repo 设置将返回到您系统上的 true

    【讨论】:

    • 不完全确定 git 是如何实现它的。我必须深入研究源代码。啊,就是这样:取决于git build-time配置项NO_TRUSTABLE_FILEMODE。如果没有定义,它会在运行时通过 chmod-ing .git/config 进行测试,最终用 .git/config.lock 替换它,从而消除其临时 chmod。临时版本设置了 u+x 位;如果它在 chmod 之后保持设置,git 认为 x 位很重要。
    • 这很有道理,但仍然令人沮丧,我不得不将一个项目从一台计算机复制到另一台计算机 5 次,直到我意识到发生了什么))谢谢!
    • 谢谢,我知道git config --global core.fileMode false 没用。 git fileMode 问题我每天都遇到。我每次创建新项目时都必须配置这些东西。
    • 在我的情况下是相反的。克隆后,本地 .git/config 文件包含: [core] filemode = false 。知道为什么它确定它应该是错误的(在 Windows 10 上对 Windows 使用 git bash)吗??
    • @u123:Git 的测试是:chmod .git/config 到 +x 如果是 -x,或者 -x 如果是 +x。然后检查是否确实发生了更改。如果是这样,新的替换 .git/config.lock 文件将获取 filemode = true 行。如果没有,新的替换 .git/config.lock 文件将获取 filemode = false 行。配置完成后,它会将.git/config.log 重命名为.git/config 并设置新的文件模式设置。
    【解决方案2】:

    也许有点矫枉过正,但在 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 默认文件模式为 false。诀窍是为构建定义 NO_TRUSTABLE_FILEMODE。

    【讨论】:

      【解决方案3】:

      (编辑)所以要恢复,我们需要在 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
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 2016-04-09
      • 1970-01-01
      • 2011-11-12
      • 2012-07-12
      • 2011-03-13
      • 2010-12-25
      相关资源
      最近更新 更多