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

Gitignore all except one folder and all its content - regardless of the nesting level

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

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

这不会实现它:

*
!dest
!dest/*

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

有人在评论中写道!如果你用 *.

开始你的 .gitignore ,你不能在没有指定你不想忽略的完整路径的情况下解决一个类似的问题

我现在确信他是对的。或者是否有一种 简洁 方法可以忽略除一个文件夹及其 整个 内容

之外的所有内容

我刚测试过(最近 Git, even on Windows

*
!dest/
!dest/**

像往常一样,您只需遵守规则:

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)

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

从那里开始,任何 git check-ignore -v dest/x/y/z/aFile 都不会 return 什么,这意味着要添加 aFile

我在“”中提到了类似的原理(略有不同的解决方案)。


请注意,对于 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) 正在尝试添加此功能:

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

*
!dest