我试图忽略位于存储库根目录.config
中的所有文件和子目录,但文件.config/vimb/config
和子目录.config/ranger/
除外。
这是我的.gitconfig
:
# Ignore the contents of .config
.config/*
# Avoid Blocking
!.config/
!.config/vimb
!.config/vimb/config
!.config/ranger/
因此,git似乎忽略了整个目录事件,即使用!
通配符生成的文件和子目录。
为了记录,我还尝试了以下方法:
# Ignore Everything
*
# Add files
!somefile1
!somefile2
# Ignore Config
.config/*
# Avoid Blocking
!.config/
!.config/vimb
!.config/vimb/config
!.config/ranger/
此外,我尝试忽略所有内容,并使用!
添加要暂存的每个单独的文件和目录。
截至目前,我使用了以下来源来解决问题:
Git是否忽略除某个目录的所有子目录之外的所有特定类型的文件?
使.gitignore忽略除少数文件之外的所有内容
如何.git忽略除少数文件之外的所有内容
感谢您提前提供的帮助。
首先,您可以在任何时候检查为什么文件仍然被忽略:
git check-ignore -v -- path/to/file
第二,你只需要忽略文件,并从你的忽略规则中排除文件夹,如果你想排除其中的文件:
.config/**
!.config/**/
!.config/vimb/config/**
!.config/ranger/**
这是因为:
如果文件的父目录被排除,则不可能重新包含该文件
这就是我提出的解决方案。总之,我的目标是从.config
目录中排除所有文件和子目录,除了包含所有文件和目录的.config/ranger
目录和.config/vimb/config
配置文件。以下.gitignore
代码完成了任务。
# Block
.config/**
# Avoid Blocking
!.config/
!.config/**/
!.config/vimb/config
!.config/ranger/
!.config/ranger/**
!.config/ranger/**/
!.config/ranger/init.rc
git status
命令按预期输出以下内容:
new file: .config/ranger/commands.py │
new file: .config/ranger/rc.conf │
new file: .config/vimb/config │
new file: .gitignore