子目录中的Git存储库是从父目录读取.gitignore

时间:2015-12-01 18:54:16

标签: git macos gitignore osx-elcapitan

我喜欢将我的主目录保留在版本控制下,以跟踪对Bash启动文件,各种配置文件等的更改。我有一个〜/ .gitignore文件忽略了所有内容,后面是各种行告诉Git究竟是哪些文件我想跟踪:

/*
!.bash*
.bash_history
!.ssh/
.ssh/*
!.ssh/config

然后我在我的主目录中托管了一些Git存储库,比如〜/ dev / project /。

这是我的问题。在我的Linux机器上,我对这两个存储库没有任何问题 - 它们没有冲突。

[~/dev/project] $ git init .
Initialized empty Git repository in ~/dev/project/.git/
[~/dev/project] $ touch test
[~/dev/project] $ git status
On branch master

Initial commit    
Untracked files:
(use "git add <file>..." to include in what will be committed)
test    
nothing added to commit but untracked files present (use "git add" to track)

但在我的Mac笔记本电脑(El Capitan)上,他们确实存在冲突。子目录中的repo是从主目录读取.gitignore,第一个规则是忽略所有内容(“/ *”):

[~/dev/project] $ git init .
Initialized empty Git repository in ~/dev/project/.git/
[~/dev/project] $ touch test
[~/dev/project] $ git status
On branch master

Initial commit    
nothing to commit (create/copy files and use "git add" to track)
[~/dev/project] $ mv ~/.gitignore ~/.gitignore.tmp
[~/dev/project] $ git status
On branch master

Initial commit    
Untracked files:
(use "git add <file>..." to include in what will be committed)
test
nothing added to commit but untracked files present (use "git add" to track)

我无法弄清楚为什么会这样。 Linux框是Debian(稳定版),Git v.2.1.4; El Capitan是Git v.2.6.2(最新)。

1 个答案:

答案 0 :(得分:0)

原来,文件〜/ .gitignore被git用作全局排除文件,但是属性没有在全局配置(〜/ .gitconfig)中设置,也没有在本地配置中设置(〜/ .git / config ),但在其他地方,某种程度上(“超级全球”?):

$ git config --global --list | grep "core\.excludesfile"

$ git config --local --list | grep "core\.excludesfile"

$ git config --list | grep "core\.excludesfile"
core.excludesfile=~/.gitignore

通过“全局”覆盖它,我修复了它:

$ git config --global core.excludesfile ""
$ git config --list | grep "core\.excludesfile"
core.excludesfile=~/.gitignore
core.excludesfile=