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

.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/将匹配目录bin及其下面的路径,但不会匹配常规文件或符号链接bin。


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

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

其他回答

你梦中的。gitignore似乎是:

bin/

在顶层。

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

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

除了@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中的跟踪中删除。

进来可以解决问题,但是…… 这里有一个更广泛的列表,你应该忽略的东西(示例列表由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*/