如何git忽略某个目录中的所有文件和子目录,除非有一些例外

  • 本文关键字:子目录 文件 git 如何 git
  • 更新时间 :
  • 英文 :


我试图忽略位于存储库根目录.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                                                                                        

最新更新