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

时间:2019-08-01 13:08:06

标签: git gitignore

我想排除文件夹reports的所有直接文件,但包括所有子文件夹。 最初,我不知道此文件夹中有任何子文件夹,因此我按下了reports/*,以不推送任何自动生成的报告。 但是现在,子文件夹中的所有模板文件在登台区域中都标记为已删除,我想解决此问题:

排除:

  • reports / report1.pdf
  • reports / report2.txt
  • reports / report3PlainFile
  • ...

包含:

  • reports / A / a_1_template.rpt
  • reports / A / a_2_template.rpt
  • reports / B / a_2_template.rpt
  • ...

我尝试过:

    reports/*
    !reports/*/

    reports/*
    !reports/*/*

但它似乎不起作用。

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

3 个答案:

答案 0 :(得分:1)

.gitignore文件内容:

/*
!/*/

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

更新

folder/*
!folder/*/

答案 1 :(得分:0)

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

但一般来说:

首先,您必须使用.p>开始.gitignore文件

*/**/.gitignore

,以便git不会将此文件共享 并继续

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

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

filename.xml

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

希望对您有帮助。

答案 2 :(得分:0)

实际上:

    reports/*
    !reports/*/

工作。问题出在其他地方。

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

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