2012-04-29 213 views
9

看来Git是忽略~/.gitconfigGit忽略gitconfig?

$ git config --global core.filemode false 

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

所以现在有2项为core.filemode和git仍然没有忽视基于torek’s answer 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_profile

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

回答

2

也许有点矫枉过正,但在Cygwin的这个困扰我够深入到问题多。当从源代码构建git时,它会检查它所构建的文件系统是否理解可执行位。

我继续修建从源头混帐我Cygwin的系统上,它安装到本地目录,然后加入二元我的路。基本步骤是:

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。

15

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

git config core.filemode false 

或者:

git config --unset core.filemode 

,使其尊重一个你~/.gitconfig。如果您再次运行git init 则每个回购设置将回到您系统上的true

+3

不完全确定git实际如何实现它。我不得不去深入的源代码。啊,它是这样的:它取决于git build-time配置项“NO_TRUSTABLE_FILEMODE”。如果没有定义,那么它会在运行时通过chmod-git/config来测试,它最终将替换为'.git/config.lock',它将清除它的临时chmod。临时版本具有设置的u + x位;如果它在chmod之后保持设置,git认为x位很重要。 – torek

+0

这是非常合情合理的,但仍然是令人沮丧的,我有一个项目从一台计算机复制到另一个5次,直到我意识到发生了什么事情))感谢! –

+1

谢谢,我知道'git config --global core.fileMode false'没用。 git 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 
+0

更新了一个模板来修复git init – Tanguy

+0

即使你编辑,'git init'仍然会返回'filemode = true' –