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

标签 git gitignore

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

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

这不会实现它:

*
!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 都不会返回任何内容,这意味着添加了 aFile

我在“Gitignore exclude certain files in all subdirectories”中提到了类似的原理(解决方案略有不同)。


请注意,使用 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

关于Gitignore 除了一个文件夹及其所有内容之外的所有内容 - 无论嵌套级别如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30792426/

相关文章:

git flow release finish -m 在 cmd 和 Git Bash 中给出不同的行为

git - 在 Android Studio 3.3.2 中构建 Android 项目后,.gitignore 中存在的文件始终会添加到 git

xcode - 如何将.gitignore文件添加到Xcode项目

node.js - package-lock.json 也应该发布吗?

android - git push 如何与 android 的 repo 工具一起工作?

c# - 跨版本的 COM 引用名称更改(Win7 CERTCLIENTLib 到 Win8 CERTCLILib)

git - 如何删除所有不小心添加到 git 系统中的本地文件

git - 在不强制推送的情况下恢复远程分支上的提交

git - Netbeans 将文件显示为已忽略,但它们不在 gitignore 中

git - 更改 .gitignore 时,所有开发人员都需要运行 `git rm --cached <path>` 吗?