我怎么能 .gitignore 一个目录下除了有模式的文件?

问题描述 投票:0回答:1

假设我有一个配置文件目录。我希望此目录和子目录下的所有内容都被忽略,但起始名称为

example.
的除外。

我尝试了一些方法,但它们都不起作用,而且大多数方法都会导致 config-files 目录下的所有文件都无法跟踪。这是我尝试做的两个例子:

# Ignore everything in the config-files directory
/config-files/**

# Allow tracking of files starting with "example."
!/config-files/**/example.*
# Ignore everything in the config-files directory
/config-files/*

# Allow tracking of files starting with "example."
!/config-files/example.*
!/config-files/**/example.*

注意: 配置文件本身由

db
jwt
等子目录组成

git gitignore
1个回答
0
投票

文档的关键规则是:

如果排除了文件的父目录,则无法重新包含该文件。出于性能原因,Git 不会列出排除的目录,因此包含文件的任何模式都无效,无论它们在哪里定义。

所以如果你有这棵树:

.
└── config-files
    ├── a
    │   ├── example.txt
    │   └── ignore-me.txt
    ├── b
    │   ├── example.txt
    │   └── ignore-me.txt
    └── c
        ├── example.txt
        └── ignore-me.txt

然后规则

/config-files/*
/config-files/**
忽略路径
config-files/a
,而git甚至不检查里面的文件.

要解决这个问题,您需要指定规则只匹配文件,而不是整个目录。例如:

# Ignore files inside the config-files sub-directories
/config-files/**/*.*

# Allow tracking of files starting with "example."
!/config-files/**/example.*
© www.soinside.com 2019 - 2024. All rights reserved.