Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git忽略gitconfig?_Git_Chmod_Git Config - Fatal编程技术网

Git忽略gitconfig?

Git忽略gitconfig?,git,chmod,git-config,Git,Chmod,Git Config,Git似乎正在忽略~/.gitconfig $ git config --global core.filemode false $ git config -l core.filemode=false core.filemode=true 所以现在有两个条目用于core.filemode,git仍然没有忽略filemode的更改 $ touch modetest $ git add . $ git commit -m test1 [master (root-commit) 320cfe4]

Git似乎正在忽略
~/.gitconfig

$ git config --global core.filemode false

$ git config -l
core.filemode=false
core.filemode=true
所以现在有两个条目用于
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
基于,我将这一行添加到我的
.bash\u配置文件中

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

创建或重新初始化新回购时,
git init
始终设置一个新值 对于
core.filemode
,基于探测文件系统的结果。你只要 必须手动:

git config core.filemode false
或:

使其尊重
~/.gitconfig
中的配置。如果再次运行
git init
在您的系统上,每次回购设置将返回到
true

(编辑)因此要继续,在windows上,我们需要执行以下操作:

git config --global --unset core.filemode
git config --unset core.filemode
git config core.filemode false
您可以在Git安装目录中为新Git文件夹(init)创建一个空配置文件:

并放入:

[core]
filemode = false

也许有点过分了,但在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中安装了所有构建依赖项,否则该构建将无法工作。只要稍微拨弄一下,我就能不费吹灰之力地做这件事。现在,该系统上的gitinit和gitclone将filemode默认为false。诀窍是为构建定义不可信任的文件模式。

不完全确定git实际如何实现它。我必须深入研究源代码。啊,就是这样:它取决于git构建时配置项
NO\u TRUSTABLE\u FILEMODE
。如果没有定义,那么它会在运行时通过chmod ing
.git/config
进行测试,并最终将其替换为
.git/config.lock
,从而清除其临时chmod。临时版本设置了u+x位;如果它在chmod之后保持不变,git认为x位很重要。这很有道理,但也令人沮丧,我不得不将一个项目从一台计算机复制到另一台计算机上5次,直到我意识到发生了什么。)谢谢!谢谢,我知道
git config--global core.fileMode false
没有用。git文件模式问题我每天都会遇到。每次我创建一个新项目时,我都必须配置这些东西。在我的情况下,情况正好相反。克隆后,本地.git/config文件包含:[core]filemode=false。知道为什么它会确定它应该为false(在windows 10上使用git bash for windows)?@u123:git的测试是:chmod
.git/config
到+x(如果它是-x),或者-x(如果它是+x)。然后检查是否确实发生了更改。如果是这样,新替换的
.git/config.lock
文件将获取一行
filemode=true
。如果不是,则新的替换
.git/config.lock
文件将获取一行
filemode=false
。配置完成后,它将
.git/config.log
重命名为
.git/config
,并设置新的文件模式设置。即使进行编辑,
git init
仍将返回
filemode=true
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
export PATH=/home/[username]/git/inst/bin:$PATH