Git:反向忽略(.gitignore)

27

我为我的 home 文件夹创建了一个仓库。这是我的 .gitignore 文件:

!.vim/plugin/*
!.vim/doc/*
.*
*
.viminfo
.vim/.netrwhist
.vim-fuf-data/file/stats
bin/dwm/dwm

我在.vim/plugin文件夹中创建了一个新文件,但是在运行git status后并未显示该文件,为什么?

编辑:根据一些回答,我已经改变了反向忽略行的位置,如下所示,但问题仍然存在:我创建的.vim/plugin文件夹中的新文件在运行git status后没有显示。

.*
*
.viminfo
.vim/.netrwhist
.vim-fuf-data/file/stats
bin/dwm/dwm
!.vim/plugin/*
!.vim/doc/*

1
git stgit status 的别名吗? - Benjamin Bannier
1
我可以在我的网站上重现这种行为。我怀疑无法“取消忽略”被忽略文件夹的子文件夹。 - Nobody moving away from SE
@Deve:也许应该改成/*,因为*可能会匹配.,从而忽略包含目录本身。 - Nobody moving away from SE
很抱歉,没有。我尝试过了。 - Deve
显示剩余3条评论
3个回答

29
第4行中,你正在忽略所有带有*的内容。这将覆盖先前的否定模式。来自man页面

在一个优先级级别内,最后匹配的模式决定结果

"优先级级别"表示不同排除模式的来源,如.gitignore$GIT_DIR/info/exclude

如果你想忽略除以!开头的模式外的所有内容,则应将*移动到.gitignore的开头.


编辑

通过SO上的另一个问题的帮助,我找到了解决方案:

*
!*/
!.vim/plugin/*

3

另一种方法是仅忽略顶层文件和目录,并在白名单目录中进行必要的操作,如此相关问题的答案所述。

例如,我的.gitignore现在看起来像这样:

/*
!.gitignore
!.vimrc
!.bashrc
!.vim/
.vim/.netrwhist
!.gconf/
.gconf/apps/*
!.gconf/apps/gnome-terminal
!bin/

Deve的回答使git非常缓慢,因为它会搜索你主目录下的所有目录。(在将git用于主目录设置的特定情况下)

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接