如何在git中忽略子文件夹/子目录?

721

我有很多项目在我的.Net解决方案中。 我想排除所有的“bin/Debug”和“bin/Release”文件夹(以及它们的内容),但仍然包括“bin” 文件夹本身和其中包含的任何dll。

.gitignore 中使用“bin/”可以忽略“Debug”和“Release”文件夹,但也会忽略“bin”文件夹中包含的任何dll。

.gitignore 文件中添加 bin/Debugbin/Release 并不会排除这些目录,除非我完全限定了被忽略的模式,如 Solution/Project/bin/Debug - 但我不想这样做,因为我需要为我的解决方案中的每个项目都包含完整的模式,并且还要为任何新添加的项目添加该模式。

有什么建议吗?


1
为什么要添加DLL?如果您正在引用第三方DLL,那么添加一个所有项目都可以引用的公共文件夹可能是有意义的。 - Paddy
7
帕迪是正确的-如果那些是第三方DLL,它们应该与您的代码分开组织。但对我来说,听起来好像你正在检入自己的生成产品,这通常不是你想要的方式。您使用git跟踪信息,该信息完全包含在代码和构建配置中。产品是产品。跟踪它们会引发问题-例如,如果您更改代码但忘记构建并检入新产品,那么怎么办? - Cascabel
我在排除子文件夹方面遇到了问题。尝试了所有方法,包括这里写的准确示例,但都没有成功。最后在文件夹模式之间添加了一行额外的空白行,这样就起作用了。也许是编码问题。我使用的是Windows系统,并将其编码为UTF8。 - RoadBump
14个回答

6

好像这个页面经过这么多年后仍然在谷歌搜索排名的顶部...

Git的现代版本支持将.gitignore文件嵌套在单个存储库中。只需在您想要忽略的子目录中放置一个.gitignore文件。使用一个星号来匹配该目录中的所有内容:

echo "*" > /path/to/bin/Debug/.gitignore
echo "*" > /path/to/bin/Release/.gitignore

如果您已经进行了以前的提交,请记得删除以前跟踪的文件:

git rm -rf /path/to/bin/Debug
git rm -rf /path/to/bin/Release

你可以通过执行 git status 命令来确认,它会显示所有已从跟踪列表中删除的文件。

0
要实现忽略所有子目录中的文件,您只需将这些模式添加到您的.gitignore文件中即可:
*/*
*.*

要理解这里发生了什么,
1. `*/*`:这个模式告诉Git忽略任何子目录中的所有文件(包括当前目录)。斜杠前面的星号匹配任何文件夹名称,斜杠后面的星号匹配任何文件名称。 2. `*.*`:另一方面,这个模式将忽略所有以点开头的文件,例如在UNIX系统中通常被视为隐藏文件。
这在大多数忽略文件(如.gitignore/.dockerignore/.npmignore等)中都适用。

0

如果要忽略子文件夹但不忽略主文件夹,我只能在Visual Studio Code中将一个虚拟的readme.txt文件放在主文件夹中才能实现。只有这样,才能在主文件夹(而非子文件夹)下使用 /*/ 进行检查。


0

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