忽略git项目上的任何bin目录

我有一个这样的目录结构:

.git/.gitignoremain/...tools/......

在main和工具以及任何其他目录中,在任何级别,都可以有一个'bin'目录,我想忽略它(我也想忽略它下面的所有内容)。我在. gitignore中尝试了这些模式中的每一种,但都不起作用:

/**/bin/**/*/./**/bin/**/*./**/bin/**/***/bin/**/**/bin/**/*bin/**/*/**/bin/* #and the others with just * at the end too

有人能帮我吗?如果我这样做,第一个模式(我认为应该有效的模式)就可以了:

/main/**/bin/**/*

但我不希望每个顶级目录都有一个条目,也不希望每次添加新目录时都必须修改. gitignore。

这是在Windows上使用最新的msysgit。

编辑:还有一件事,有些文件和目录的名称中有子字符串“bin”,我不希望它们被忽略:)

1018090 次浏览

你的梦想.gitignore似乎是:

bin/

在顶层。

在版本1.8.2之前,**.gitignore中没有任何特殊含义。从1.8.2开始,git支持**表示零个或多个子目录(参见发行说明)。

忽略目录树中低于当前级别的所有名为bin的目录的方法是使用.gitignore文件,其模式如下:

bin/

man页面中,有一个使用类似模式忽略名为foo的目录的示例。

编辑:如果您的git索引中已经有任何您不再希望跟踪的bin文件夹,那么您需要显式删除它们。Git不会仅仅因为它们现在匹配新的.gitignore模式而停止跟踪已经被跟踪的路径。从仅索引(--缓存)递归执行文件夹删除(rm)(-r)。根bin文件夹的命令行示例:

git rm -r --cached bin

我没有看到这里提到它,但这似乎是区分大小写的。一旦我更改为 /Bin文件就像预期的那样被忽略了。

**以前从未正常工作过,但从git 1.8.2(2013年3月8日)开始,它似乎被明确提到并得到支持:

.gitignore.gitattributes中的模式文件可以有#2,作为匹配子目录0或更多级别的模式

例如,“foo/**/bar”匹配“foo”本身或“foo”子目录中的“bar”。

在您的情况下,这意味着现在可能支持这一行:

/main/**/bin/
[Bb]in/

匹配大写和小写

[Bb]in会解决问题,但是…这里有一个更广泛的你应该忽略的事情列表(GitEx久远的示例列表):

#ignore thumbnails created by windowsThumbs.db#Ignore files build by Visual Studio*.user*.aps*.pch*.vspscc*_i.c*_p.c*.ncb*.suo*.bak*.cache*.ilk*.log[Bb]in[Dd]ebug*/*.sbrobj/[Rr]elease*/_ReSharper*/

作为通知;

如果您认为.gitignore在某种程度上不起作用(因此在其中添加了foo/*文件夹,但git status仍然显示该文件夹内容已修改或类似的内容),那么您可以使用此命令;

git checkout -- foo/*

我认为值得一提的是git初学者:

如果您已经签入了一个文件,并且您想忽略它,Git如果稍后添加规则,则不会忽略该文件。在这种情况下,您必须先取消跟踪文件,方法是在终端:

git rm --cached

因此,如果您想在编辑. gitignore后添加以忽略本地存储库中的某些目录(已经存在),您需要在根目录上运行它

git rm --cached -r .git add .

它基本上会“刷新”您的本地存储库并取消执行被忽略的文件。

见:

http://git-scm.com/docs/git-rm

https://help.github.com/articles/ignoring-files/

如果您正在为任何Visual Studio(. NET)解决方案寻找出色的全局.gitignore文件-我建议您使用这个:https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

AFAIK它拥有最全面的.gitignore。NET项目。

将**/bin/添加到. gitignore文件对我来说很有用(注意:bin文件夹未添加到索引中)。

对于2.13.3及以后,仅在. gitignore文件中写入bin应忽略bin及其所有子目录和文件

bin

步骤1:将以下内容添加到文件. gitignore。

# User-specific files*.suo*.user*.userosscache*.sln.docstates
# Build results[Dd]ebug/[Dd]ebugPublic/[Rr]elease/[Rr]eleases/x64/x86/bld/[Bb]in/[Oo]bj/
# Visual Studio 2015 cache/options directory.vs/

第2步:确保有效

如果问题仍然存在,那是因为. gitignore中的设置只能忽略最初为未跟踪的文件。如果某些文件已经包含在版本管理系统中,则修改. gitignore无效。要完全解决此问题,您需要打开gitbash包管理器控制台(请参阅下面的屏幕截图)以在存储库根文件夹中运行以下命令。

git rm -r --cached .git add .git commit -m "Update .gitignore"

PM控制台这样问题就解决了

从字面上看,没有一个答案对我有效;唯一对我有效的是(Linux):

**/bin(yes without the / in the end)
git version 2.18.0

如果.gitignore中的模式以斜杠/结尾,它只会找到与目录匹配的内容。

换句话说,bin/将匹配目录bin及其下的路径,但不会匹配常规文件或符号链接bin


如果模式不包含斜杠,就像bin Git一样,将其视为shell全局模式(贪婪)。所以最好使用简单的/bin

bin不是这个问题的最佳解决方案。

在我的情况下,gitignore文件的编码有问题,检查它是否是UTF-8

除了@CB Bailey的回答:

我试图从索引和跟踪中删除名为et-cache(来自Wordpress主题的缓存文件夹)的多个文件夹(在子文件夹中)。

我添加

et-cache/

.gitignore文件。但是

git rm -r --cached et-cache

导致一个错误:

致命:Pathspec'et-ache'与任何文件不匹配

所以解决方案是使用Powershell:

Get-ChildItem et-cache -Recurse |% {git rm -r --cached $_.FullName}

这将搜索名为et-ache的所有子文件夹。然后使用每个文件夹路径(fullname)将其从git中的跟踪中删除。