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

.git/
.gitignore
main/
  ...
tools/
  ...
...

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

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

有人能帮帮我吗?如果我这样做,第一种模式(我认为应该是有效的)就会很好:

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

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

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

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


你梦中的。gitignore似乎是:

bin/

在顶层。


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

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

bin/

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

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

git rm -r --cached bin

我在这里没有看到它,但这似乎是区分大小写的。一旦我更改为/Bin,文件就会被忽略。


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

.gitignore和.gitattributes文件中的模式可以有**/,作为匹配0级或多级子目录的模式。 如。"foo/**/bar"匹配"foo"本身或"foo"的子目录中的"bar"。

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

/main/**/bin/

[Bb]in/

同时匹配大写和小写


进来可以解决问题,但是…… 这里有一个更广泛的列表,你应该忽略的东西(示例列表由GitExtension):

#ignore thumbnails created by windows
Thumbs.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*/
*.sbr
obj/
[Rr]elease*/
_ReSharper*/

作为通知;

如果你认为.gitignore在某种程度上不起作用(所以添加了foo/*文件夹,但git状态仍然显示文件夹内容已被修改或类似的内容),那么你可以使用这个命令;

Git checkout——foo/*


我认为对于git初学者来说有必要提一下:

如果你已经签入了一个文件,你想忽略它,Git 如果稍后添加规则,将不会忽略该文件。在这些情况下,你 必须首先通过在您的?中运行以下命令取消跟踪文件 终端: Git rm——缓存

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

git rm --cached -r .
git add .

它将基本上“刷新”您的本地回购和取消被忽略的文件。

See:

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

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


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

我想它有最全面的。net项目。gitignore。


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


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


步骤1:在.gitignore文件中添加以下内容。

#用户特定的文件 * .suo * .user * .userosscache * .sln.docstates #构建结果 (Dd) ebug / (Dd) ebugPublic / (Rr)抽/ (Rr)抽/ x64 / x86 / bld / (Bb) / (Oo) bj / # Visual Studio 2015缓存/选项目录 .vs /

第二步:确保生效

如果问题仍然存在,那是因为.gitignore中的设置只能忽略最初没有跟踪的文件。如果一些文件已经包含在版本控制系统中,那么修改.gitignore是无效的。 要完全解决这个问题,您需要打开Git Bash或Package Manager Console(见下面的截图),在存储库根文件夹中运行以下命令。

Git rm -r——cached。 Git添加。 git commit -m "Update .gitignore"

这样问题就完全解决了。


实际上,没有一个答案对我有用;唯一对我有用的是(在Linux上):

**/bin
(yes without the / in the end)

git version 2.18.0 

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

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


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

Bin不是这个特殊问题的最佳解决方案。


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


除了@CB Bailey的回答:

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

我添加了

et-cache/

到.gitignore文件。但

git rm -r --cached et-cache

导致错误:

致命:路径规格'et-cache'没有匹配任何文件

所以解决方案是使用powershell:

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

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