588

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

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

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

有什么建议么?

4

12 回答 12

744

你试过通配符吗?

Solution/*/bin/Debug
Solution/*/bin/Release

使用 1.8.2 版本的 git,您还可以使用**通配符来匹配任何级别的子目录:

**/bin/Debug/
**/bin/Release/
于 2010-03-30T13:52:04.690 回答
142

您可以在顶层使用 .gitignore 来忽略项目中具有相同名称的所有目录。例如:

Debug/
Release/

这应该立即更新,以便在您执行 git status 时可见。确保这些目录尚未添加到 git,因为这将覆盖忽略。

于 2010-03-30T14:59:00.317 回答
79

以上所有答案都是有效的,但我认为没有提到的是,一旦您将该目录中的文件添加到存储库中,您就不能忽略包含该文件的目录/子目录(git 将忽略该指令)。

要忽略已添加的文件,请运行

$ git rm -r --cached

否则,您必须先从 repo 的目标目录中删除所有文件 - 然后您可以忽略该文件夹。

于 2015-03-08T04:14:27.353 回答
75

问题不是要忽略所有子目录,但是我在任何地方都找不到答案,所以我将其发布:*/*.

于 2013-04-24T03:49:43.203 回答
36

除了将正确的条目放入 .gitignore 文件之外,如果您试图忽略已添加到 repo 中的某些内容,则必须git rm -r /path/to/dir在将 dir 添加到 .gitignore 文件之前执行并提交。否则 git 唯一会忽略的是你的忽略指令。

于 2016-03-07T19:29:33.030 回答
30

我让它在我的机器上工作的唯一方法就是这样做:

# Ignore all directories, and all sub-directories, and it's contents:
*/*

#Now ignore all files in the current directory 
#(This fails to ignore files without a ".", for example 
#'file.txt' works, but 
#'file' doesn't):
/*.*

#Only Include these specific directories and subdirectories:
!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/

请注意,您必须如何明确允许要包含的每个级别的内容。所以如果我在主题下有 5 个子目录,我仍然需要把它拼出来。

这是来自@Yarin 的评论:https ://stackoverflow.com/a/5250314/1696153

这些是有用的主题:

我也试过

*
*/*
**/**

**/wp-content/themes/**

或者/wp-content/themes/**/*

这些都不适合我。很多线索和错误!

于 2015-04-29T23:28:15.387 回答
25

要排除内容和子目录:

**/bin/*

要仅排除所有子目录但获取内容,请添加“/”:

**/bin/*/
于 2018-06-18T13:28:17.030 回答
13

要忽略所有子目录,您可以简单地使用:

**/

这适用于 git 版本 1.8.2。

于 2016-11-01T15:34:57.110 回答
10

忽略所有子文件夹,同时继续跟踪/bin目录中的文件的通用方法是将以下行添加到项目的 .gitignore 文件中:

bin/*/*

如果您只想忽略特定命名的子文件夹,您可以执行以下操作:

bin/Debug/*
bin/Release/*

注意。如果该bin目录不在项目的根目录中(与 .gitignore 文件一起),则代替例如。bin/*/*你可能需要path/to/bin/*/*

于 2016-02-15T17:28:54.327 回答
6

忽略 .gitignore 文件中存储库根目录的所有子文件夹的最简单形式是:

*/

如果要忽略另一个子文件夹的所有子文件夹:

subfolder/*/

如果您已经提交了需要忽略的项目,则需要在它们被忽略之前将它们从 repo 中删除。

要删除 repo 根目录的所有子文件夹:

git rm -r --cached */*

要删除另一个子文件夹的所有子文件夹:

git rm -r --cached subfolder/*/*
于 2021-04-09T04:37:51.637 回答
3

似乎这个页面在这么多年后仍然出现在谷歌搜索的顶部......

现代版本的 Git 支持在单个 repo 中嵌套 .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向您显示从跟踪中删除的所有文件来确认它。

于 2020-12-16T08:57:04.600 回答
0

对于忽略子文件夹而不是主文件夹,我只能通过在主文件夹中放置一个虚拟的 readme.txt 来使其在 Visual Studio Code 中工作。只有在 /*/ 中检查了主文件夹(并且没有子文件夹)。

于 2020-07-11T06:19:17.577 回答