# Ignore everything
*
# Whitelist every directories, so we can recurse into them
!*/
# Whitelist .gitignore and .txt
!.gitignore
!*.txt
但是,如果您想忽略存储库中的一个文件夹,并将任何目录或子目录中的.txt文件列入白名单:
# Recursively ignore every files in my_folder
/my_folder/**
# Recursively whitelist every directories in my_folder
!/my_folder/**/
# Whitelist .txt
!*.txt
4条答案
按热度按时间jfgube3f1#
如果您尝试这样做,它会失败,因为您最终会将结构中的目录列入黑名单。
要解决这个问题,您需要将所有不是目录且不是您要提交的文件类型之一的内容列入黑名单,同时不将目录列入黑名单。
.gitignore
文件将执行以下操作:在
*.one
,*.two
和*.three
文件存在的情况下,使用位于存储库根目录的.gitignore
在.txt
文件的三级结构白名单中测试了这一点-对我很有效。您不必将.gitignore
文件添加到结构中的所有目录。我用来找出答案的信息来自this(stackoverflow.com)。
yebdmbv42#
实现这一点的更简单方法是:
这是因为
gitignore
将不以/
开头的模式应用到.gitignore
文件以下的每个级别:如果模式的开头或中间(或两者)有分隔符,则该模式相对于特定.gitignore文件本身的目录级别。否则,该模式还可能在.gitignore级别以下的任何级别匹配。
如果您想对 directory 中的文件执行此操作,事情会变得更加复杂:
这是因为
gitignore
对**
有特殊的规则:与完整路径名匹配的模式中的两个连续星号(“
**
“)可能具有特殊含义:a/**/b
“匹配“a/b
“、“a/x/b
“、“a/x/y/b
“等。关键是要确保您不忽略目录,因为不管其他规则如何,该目录中的每个文件都会被忽略。
bvuwiixz3#
我找了很久:
1.假设我有一个很大的文件夹结构,其中递归嵌套了大约100.000个目录,在这些文件夹中,大约有30.000个
.txt
类型的文件(在我的例子中:在这些*.md
文件旁边,有,比方说,500 GB的(一百万+)文件,我不想跟踪。1.我希望git只跟踪所有文件夹和子目录中的
.txt
(或*.md
)文件。正确答案应为:这在Git中不可能。
我做的是:
[edit:也不起作用--我试着创建一个带有符号链接(或硬链接)的文件夹,然后在那里使用git,但是git没有遵循符号链接,而是覆盖了硬链接。
du7egjpx4#
如果您想忽略存储库中除
.txt
文件之外的所有内容,.gitignore
应该如下所示:但是,如果您想忽略存储库中的一个文件夹,并将任何目录或子目录中的
.txt
文件列入白名单: