Gitignore 排除所有子目录中的某些文件

Gitignore exclude certain files in all subdirectories

我有一个名为 /static 的目录。里面有很多子目录。 我需要忽略 /static/ 目录的所有子目录中的所有文件,除了 .htaccess、null.jpg 和 index.php 文件。 请告诉我此操作的正确语法是什么?

/static/**
!/static/**/.htaccess

/static/*
!/static/*/.htaccess

不工作。

正如我在“”中提到的,要记住的主要规则是:

It is not possible to re-include a file if a parent directory of that file is excluded. (*)
(*: unless certain conditions are met in git 2.?+, see below)

这就是为什么任何忽略文件夹的规则(如 **/)都不可能排除任何子文件。

这就是为什么正确的方法是排除所有内容,除了:

  • 文件夹,
  • (然后) 您要排除的文件。

如果您不先排除文件夹,您的文件仍将被忽略(因为我上面提到的规则)

所以添加你的 .gitignore:

/static/**/**
!/static/**/
!.gitignore
!.htaccess

这已通过 Git 2.4.1 测试,甚至可以在 Windows.

上运行

请注意,对于 git 2.9.x/2.10(2016 年年中?),如果文件的父目录被排除在外,则可能会重新包含该文件 if there is no wildcard in the path re-included.

Nguyễn Thái Ngọc Duy (pclouds) 正在尝试添加此功能:

但是,由于其中一个条件是 "The directory part in the re-include rules must be literal (i.e. no wildcards)",您无论如何都无法在此处使用该功能。