【问题标题】:How to git ignore all files and subdirectories from a certain directory except with some exceptions?git如何忽略某个目录中的所有文件和子目录,但有一些例外?
【发布时间】:2021-05-03 22:50:52
【问题描述】:

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


【解决方案1】:

首先,您可以随时检查为什么文件仍然被忽略:

git check-ignore -v -- path/to/file

其次,您只需要忽略文件,并从忽略规则中排除 文件夹,如果您希望能够排除其中的文件:

.config/**
!.config/**/
!.config/vimb/config/**
!.config/ranger/**

这是因为:

It is not possible to re-include a file if a parent directory of that file is excluded

【讨论】:

  • 感谢您的回复,它让我走上了正轨。
  • @unknown 太好了!你找到了什么解决方案?
【解决方案2】:

这是我想出的解决方案。总而言之,我的目标是从.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                                                                                        

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2011-11-26
    • 2013-09-26
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    相关资源
    最近更新 更多