Git 忽略除一个文件夹及其所有内容之外的所有内容 - 无论嵌套级别如何

luq*_*o33 4 git gitignore

我知道这个问题已经被问过很多次了,但老实说 - 尽管有许多公认的答案,但我还没有找到解决这个问题的巧妙方法。我强调这里的工作要整洁

我想忽略除一个文件夹及其全部内容之外的所有内容。

这不会实现它:

*
!dest
!dest/*
Run Code Online (Sandbox Code Playgroud)

这将保留dest中的文件夹和所有文件dest,但不保留 中的其他文件夹以及这些子文件夹中的文件。

有人在评论里留言了!.gitignore对于类似的问题之一,如果您从开始,如果不指定您不想忽略的内容的完整路径,则无法实现此目标*

我现在确信他是对的。或者是否有一种巧妙的方法来忽略除一个文件夹及其全部内容之外的所有内容

Von*_*onC 5

我刚刚测试过(使用最近的 Git,甚至在 Windows 上

\n\n
*\n!dest/\n!dest/**\n
Run Code Online (Sandbox Code Playgroud)\n\n

像往常一样,您只需遵循以下规则:

\n\n
\n

如果排除某个文件的父目录,则无法重新包含该文件。( *)
\n (*: 除非在 git 2.?+ 中满足某些条件,见下文)

\n
\n\n

一旦dest文件夹被列入白名单 ( !dest/),您就可以轻松排除其内容(在多个级别上) ( !dest/**)。

\n\n

从那里开始,anygit check-ignore -v dest/x/y/z/aFile不会返回任何内容,这意味着aFile添加。

\n\n

我在“ Gitignore排除所有子目录中的某些文件”中提到了类似的原理(略有不同的解决方案)。

\n\n
\n\n

请注意,使用 git 2.9.x/2.10(2016 年中?),如果重新包含的路径中没有通配符,则排除该文件的父目录,则可能可以重新包含该文件。

\n\n

Nguy\xe1\xbb\x85n Th\xc3\xa1i Ng\xe1\xbb\x8dc Duy ( pclouds)正在尝试添加此功能:

\n\n\n\n

在这里,这应该适用于 git 2.9+:

\n\n
*\n!dest\n
Run Code Online (Sandbox Code Playgroud)\n