在 gitignore 中包含特定的文件扩展名

Including specific file extension in gitignore

我想包含 Assets 目录和所有子目录中的所有 *.meta 文件,同时排除 Assets 中的所有其他内容

我试过了

/Assets/*
!/Assets/**/*.meta
!*.meta

但这只包括 /Assets 中的 *.meta ????

感谢您的帮助

首先,如果忽略规则不起作用,你可以检查这个with git check-ignore:

git check-ignore -v -- yourFile

它会显示哪个忽略规则忽略了一个你认为不应该被忽略的文件。

那么在忽略时要记住的主要规则是:

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)

这就是为什么您的规则仅在 /Assets 中包含 *.meta(而不是子目录)

您需要包含文件的所有父文件夹(如 in this recent example)才能包含文件

/Assets/**/**
! /Assets/**/
!/Assets/**/*.meta

我用 git 2.4.1 测试了它,它可以工作(甚至在 Windows 上)。
它仅包括 Assets 中的 *.meta 文件和所有子目录,但不包括其他所有内容。


请注意,对于 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)

那在这里行不通。