.gitignore 如何排除特定文件夹的所有直接文件但包括该文件夹的所有子文件夹?

.gitignore How to exclude all direct files of a specific folder but include all subfolders of that folder?

我想排除文件夹 reports 的所有直接文件,但包括所有子文件夹。 起初我不知道这个文件夹中有任何子文件夹,我推 reports/*,不推任何自动生成的报告。 但是现在子文件夹中的所有模板文件在暂存区都被标记为已删除,我想解决这个问题:

排除:

包括:

我试过:

    reports/*
    !reports/*/

    reports/*
    !reports/*/*

但是好像不行。

现在 reports 文件夹中的所有内容都被排除在外。 但我只想排除所有直接文件并包括所有子文件夹(及其内容)。

*请注意,在 .gitignore 中您只排除文件。 *要专注于您的问题,答案是您必须手动导航到每个文件并保持嵌套路径不变。

但总的来说:

首先你必须开始你的.git忽略文件

*/**/.gitignore

,这样git就不会把这个文件分享出去 并继续

**/target/*   
**/*.xml

,想法是将文件本身包含为

filename.xml

,或者用*作为导航 在 xml 行中,您要排除类型为 .xml 的所有文件,而在目标中,您要排除该文件包含的所有文件。

希望对你有所帮助。

.gitignore 文件内容:

/*
!/*/

首先忽略所有内容,然后从上次匹配(所有内容)中递归排除文件夹。

更新

folder/*
!folder/*/

实际上:

    reports/*
    !reports/*/

成功了。问题出在其他地方。

我在分支 A 上推送了 reports/* 并将其合并到分支 B。

所以所有模板文件仍然存在于分支 A 上,但在分支 B 的暂存区中被标记为已删除。所以我切换回分支 A 并在 .gitignore 文件中添加 !reports/*/。然后我第二次将分支 A 合并到分支 B 中,并丢弃了分支 B 暂存区域中的所有内容,现在子文件夹(和内容)又回到了分支 B。