我知道这个问题已经被问过很多次,但老实说 - 尽管有很多公认的答案,但我还没有找到解决这个问题的巧妙方法。我在这里强调工作整洁。
我想忽略除一个文件夹及其全部内容之外的所有内容。
这不会实现它:
*
!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
)正在尝试添加此功能:
- commit 506d8f1对于 git v2.7.0,在 commit 76b620d 中还原git v2.8.0-rc0
- commit 5e57f9c git v2.8.0-rc0,...在 commit 5cee3493 中恢复(!) git 2.8.0-rc4.
在这里,这应该适用于 git 2.9+:
*
!dest
关于Gitignore 除了一个文件夹及其所有内容之外的所有内容 - 无论嵌套级别如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30792426/