如何在.gitignore文件中忽略一个文件夹下的所有子文件夹

18

我在Git中有一个文件夹,其中包含一些文件。这些文件是我的Git存储库的一部分。运行我的项目时,在此文件夹中会出现一些工作目录。目录可以具有任何名称和任何嵌套级别,包括多个子目录。我想忽略此文件夹中可能出现的所有子目录,但仍保留根目录下所有文件(非目录)。

我尝试过以下模式:

/
*/
/*
/*/

以上方法均无法达到所需结果。如何实现?

很多答案解释了如何忽略特定名称的文件夹,例如Git ignore sub folders。但没有人解释如何使用通配符忽略所有子文件夹。


请参见Git忽略子文件夹 - Mete Cantimur
@ Mete Cantimur, pfnuesel,感谢您提供的链接。 我尝试了其中提供的所有变体,但都无法解决我的问题。我不认为我的问题是重复的。这些链接中的人想要忽略具有特定名称的子文件夹,而我想要使用通配符忽略所有可能的子文件夹。 - Boris Zinchenko
2个回答

17

试试这个:

!folder/
folder/*
第一行排除顶层不被忽略,第二行忽略所有子文件夹。

5
folder/*/会产生相同的结果吗? - pfnuesel
@Tim Biegeleisen,谢谢。它有效。所以我将其标记为答案,尽管我自己也知道这种方法。但从管理逻辑上讲,它并不完美:假设我稍后将此文件夹移动到另一个位置。我将不得不根据每个存储库的重组调整父文件夹中的.gitignore。有没有办法从问题文件夹内部的.gitignore中完成这项工作? - Boris Zinchenko
1
如果您开始移动文件/文件夹,那么.gitignore不会是您面临的唯一问题。您还必须处理部分破损的历史记录以及任何拉取此类更改的人可能遇到的潜在冲突。 - Tim Biegeleisen

13

很简单。在文件夹中创建.gitignore

*/*

即忽略当前文件夹及其所有子文件夹中的所有文件。


2
谢谢你的建议。我刚试了一下,但是对我来说并没有起作用。所有的子文件夹仍然可见。 - Boris Zinchenko
人们理解事物的方式真是令人惊叹,比如这个问题逻辑上指的是“忽略子文件夹”(而不是文件)……我无语了。 - user4244405
1
@argon git不会跟踪或查找文件夹,它只会跟踪文件的完整名称。但现在我意识到可能会引起混乱,因为我说过“在文件夹中创建...” ,但他可能是在工作副本根目录下创建的。 - kan
@kan - 只有当文件夹为空时,这才是正确的;但是,如果文件夹包含任何内容(而不仅仅是空文件夹),那么git确实会相应地跟踪它们;因此忽略子文件夹很简单:/path/to/folder/**/.. 快速提示:在撰写本文时,Atom编辑器无法正确显示此内容,您需要从终端运行:find . -type f | git check-ignore --stdin来查看您的忽略模式是否有效。 - user4244405
1
@argon "/path/to/folder/**/"和"/path/to/folder//"有什么区别? - kan
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接