.gitignore 中的感叹号不起作用



我有这样的文件结构

aaafolder
└─ bbbfolder
├─ filename0.txt
├─ dddfolder
│  ├─ filename1.txt
│  └─ filename2.txt
├─ cccfolder
└─ filename.txt

我想隐藏aaafolder文件夹中的所有内容,但dddfolder文件夹中的所有文件必须存在。

在存储库中,我想在Git中得到这个:

aaafolder
└─ bbbfolder
└─ dddfolder
├─ filename1.txt
└─ filename2.txt

我的.gitignore是这样的:

/source/aaafolder/**
!/source/aaafolder/bbbfolder/dddfolder/*

但是,忽略整个aaafolder文件夹

根据gitignore文档,当否定时:

如果一个文件的父目录被排除,则不可能重新包含该文件。

这意味着您需要确保包含dddfolder,即使不包含dddfolder的内容。

换句话说,您不能使用**进行贪婪匹配。您需要使用单级通配符。您需要排除dddfolder之前的文件夹,然后包含它们的内容。

aaafolder/*
!aaafolder/bbbfolder
aaafolder/bbbfolder/*
!aaafolder/bbbfolder/dddfolder

试一下:

aaafolder/*
!aaafolder/bbbfolder/*

您还需要分别取消忽略每个子目录-bbbfolder/bbbfolder/dddfolder/

/source/aaafolder/
!/source/aaafolder/bbbfolder/
!/source/aaafolder/bbbfolder/dddfolder/
!/source/aaafolder/bbbfolder/dddfolder/*

最新更新