Git是否忽略除子文件夹(包含所有内容)以外的所有内容?

Git是否忽略除子文件夹(包含所有内容)以外的所有内容?,git,gitignore,Git,Gitignore,我想忽略所有内容,除了特定的子文件夹(及其所有内容!)。我试图解决可能重复的问题,但没有成功 我需要一些简单的东西,比如: * !That/Very/Folder/* 但这是行不通的 我想忽略一切 将文件夹添加到gitignore 除了特定的子文件夹(及其所有内容!) 强制将文件夹添加到存储库 git add -f folder 编辑: 例如,当我需要保留日志文件夹,但不保留其内容时,我使用此解决方案。通常,当我假设永远不会添加文件夹的内容时。通常,我只添加path/to/folder/.

我想忽略所有内容,除了特定的子文件夹(及其所有内容!)。我试图解决可能重复的问题,但没有成功

我需要一些简单的东西,比如:

*
!That/Very/Folder/*
但这是行不通的 我想忽略一切

将文件夹添加到gitignore

除了特定的子文件夹(及其所有内容!)

强制将文件夹添加到存储库

git add -f folder

编辑:

例如,当我需要保留日志文件夹,但不保留其内容时,我使用此解决方案。通常,当我假设永远不会添加文件夹的内容时。通常,我只添加
path/to/folder/.gitcept
文件和
-f
选项

*
!*/
!That/Very/Folder/**
!Also/This/Another/Folder/**
忽略所有内容,允许子文件夹(!),然后允许特定文件夹内容(其中包含无限子文件夹)


要归功于@Jepessen,这是使它工作的中间部分。

您的
.gitignore
几乎可以工作,但它不能工作,原因很简单:第一条规则(
*
)告诉Git忽略存储库根目录中的每个文件和目录。Git尊重它并忽略一切,包括目录及其内容。遵循的“unignore”规则与
that
子目录中的任何内容都不匹配,因为
that
目录与它的内容一起被忽略,并且它们没有任何效果

为了告诉Git不要忽略深度嵌套子目录中的文件和目录,您必须编写ignore和unignore规则,让它首先到达封闭的子目录,然后添加所需的规则


您的
.gitignore
文件应如下所示:

### Ignore everything ###
*

# But do not ignore "That" because we need something from its internals...
!That/

# ... but ignore (almost all) the content of "That"...
That/*
# ... however, do not ignore "That/Very" because we need to dig more into it
!That/Very/

# ... but we don't care about most of the content of "That/Very"
That/Very/*
# ... except for "That/Very/Folder" we care
!That/Very/Folder/
# ... and its content
!That/Very/Folder/*

只是出于好奇。。为什么不直接将存储库创建到子文件夹中?来自:如果文件的父目录被排除,则无法重新包含该文件。在您的情况下,被match all(
*
)ignore模式排除,因此
下面的任何
都不能重新包含。无论如何,您可以尝试添加
*/。您能否提供您的git status输出的样本?感谢或澄清的可能副本的可能副本!然而,这个简单的加法似乎能让它工作。哇,我喜欢这个答案。不幸的是,我无法使它适用于我的案例“深度嵌套文件”。你能看一下吗@deadcoder0904再次仔细阅读此答案,然后尝试将其应用于您的情况。注意细节。@axiac我设法让它工作了。谢谢你,但我只有一个抱怨。我不知道现在如何添加文件。最后一步添加了子文件夹,但我只需要该子文件夹中的一个文件。此外,我的
.gitignore
也变得太大,无法容纳嵌套得很深的文件夹。这是正常的吗?这个解决方案暂时有效,但它不能说服Git关心稍后在该文件夹中创建的新文件。文件夹及其内容仍被忽略。不是吗?我实际上没有尝试过这一点(因为我喜欢更好地维护显式编写的规则)。