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

如何git忽略子文件夹/子目录?,git,directory,ignore,gitignore,Git,Directory,Ignore,Gitignore,我的.Net解决方案中有很多项目。我想排除所有“bin/Debug”和“bin/Release”文件夹(及其内容),但仍然包括“bin”文件夹本身以及其中包含的任何dll .gitignore与“bin/”一起忽略“调试”和“发布”文件夹,但也忽略“bin”文件夹中包含的任何dll .gitignore文件中的bin/Debug或bin/Release不排除目录,除非我将忽略模式完全限定为Solution/Project/bin/Debug,我不想这样做,因为我需要在我的解决方案中为每个项目包含

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

.gitignore
与“bin/”一起忽略“调试”和“发布”文件夹,但也忽略“bin”文件夹中包含的任何dll

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


有什么建议吗?

你试过通配符吗

Solution/*/bin/Debug
Solution/*/bin/Release
对于git的1.8.2版,您还可以使用
**
通配符来匹配任何级别的子目录:

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

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

Debug/
Release/

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

问题并不是要忽略所有子目录,但我在任何地方都找不到答案,因此我将发布它:
*/*
以上所有答案都是有效的,但我认为没有提到的一点是,一旦将该目录中的文件添加到repo中,就不能忽略包含该文件的目录/子目录(git将忽略该指令)

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

$ git rm -r --cached

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

我在我的机器上实现此功能的唯一方法是这样做:

# 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在这里的评论:

这些都是有用的话题:

我也试过了

*
*/*
**/**
**/wp内容/主题/**

/wp content/themes/***


这些对我来说都不管用。很多线索和错误

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

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

bin/Debug/*
bin/Release/*

注意。如果
bin
目录不在项目的根目录中(与.gitignore文件一起),那么如果您试图忽略已添加到repo的内容,除了在.gitignore文件中放置正确的条目之外,您可能还需要
path/to/bin/*/*

,而不是
bin/*/*
,在将目录添加到.gitignore文件之前,必须执行git rm-r/path/to/dir
并提交该操作。否则git只会忽略您的ignore指令。

要忽略所有子目录,您只需使用:

**/

这从git的1.8.2版开始生效。

排除内容和子目录:

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


为了忽略子文件夹而不是主文件夹,我只能在Visual Studio代码中通过在主文件夹中放置一个虚拟readme.txt来实现这一点。只有在主文件夹中/*/才被选中(没有子文件夹)。

这么多年后,这个页面似乎仍然显示在谷歌搜索的顶部…

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
来确认,以显示从跟踪中删除的所有文件。

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

*/
如果要忽略其他子文件夹的所有子文件夹:

subfolder/*/
git rm -r --cached subfolder/*/*
如果您已经提交了需要忽略的项目,则需要在忽略之前将其从回购中删除

要删除repo根目录的所有子文件夹,请执行以下操作:

git rm -r --cached */*
要删除其他子文件夹的所有子文件夹,请执行以下操作:

subfolder/*/
git rm -r --cached subfolder/*/*

为什么要添加DLL的?如果您正在引用第三方DLL,那么添加一个供所有项目引用的公用文件夹可能是有意义的。Paddy是对的-如果这些是第三方DLL,那么它们可能应该远离您的代码进行组织。不过,对我来说,这听起来像是在检查自己的构建产品,这通常不是您想要的方式。您可以使用git跟踪信息,这些信息完全包含在代码和构建配置中。产品是,嗯,产品。跟踪它们是自找麻烦——例如,如果您更改了代码但忘记构建和签入新产品怎么办?我在排除子文件夹方面遇到了问题。尝试了所有东西,包括这里所写的确切样本,但没有成功。最后,我在文件夹模式之间添加了一个额外的空行,它开始工作了。可能是编码问题。我有windows并用UTF8编码。它可以工作,除非在解决方案/模块/项目中有另一个项目的子文件夹,所以现在我添加了/*/*/bin/Debug和/*/*/*/bin/Debug(用于子文件夹)。看起来您必须为目录结构中的每一级添加一个通配符子文件夹。@Marcel:好吧,git肯定不会忽略任何您没有告诉它的文件-它会忽略任何与通配符匹配的文件,不会更多,也不会更少。我想双星将跨越目录边界,即:/**/bin/Debug@Taras:不幸的是,没有。Visual Studio上有一个与代码相关的bug