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

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

.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',我不希望这些文件和目录被忽略 :)

对该问题的评论 (3)
解决办法

在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
评论(9)

你梦想中的".gitignore "似乎是这样的。

bin/

在顶层。

评论(4)

我觉得对于git初学者来说,这是值得一提的。

如果你已经有一个文件被签入,而你想忽略它,**Git

将不会忽略该文件,如果你以后添加一个规则**。 在这些情况下,您可以

必须先取消对文件的跟踪,在下面的命令中运行 终端。 终端:

git rm --cached

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

git rm --cached -r .
git add .

它基本上会'刷新&39。 你的本地repo和取消stage忽略的文件。

参见。

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

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

评论(2)

**以前从来没有正常工作过,但自从 [git 1.8.2 (March, 8th 2013)][1]之后,它似乎被明确提及并得到支持。

.gitignore.gitattributes文件中的模式可以有`/`,作为匹配0级以上子目录的模式**。

例如 "foo/**/bar" 匹配"bar&quot。 中的"foo" 本身或在"foo"的子目录中。

在您的例子中,这意味着这一行可能会被支持。

/main/**/bin/

[1]: https://github.com/git/git/blob/master/Documentation/RelNotes/1.8.2.txt#L85-L88

评论(1)
[Bb]in/

大写和小写都匹配

评论(3)

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

评论(2)

[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*/
评论(2)

如果你正在为任何Visual Studio (.NET)解决方案寻找一个伟大的全局.gitignore文件,我推荐你使用这个文件。 https://github.com/github/gitignore/blob/master/VisualStudio.gitignore .gitignore文件。

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

评论(1)

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

<!--开始片段。 js hide: false console.true babel: true true babel.false --> -- begin snippet: js hide: false console: true false -->

用户专用文件

*.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是无效的。 要彻底解决这个问题,需要打开Git BashPackage Manager Console**(见下图截图),在版本库根目录下运行以下命令。

<!--开始 snippet: js hide: false console.true babel: true true babel.false --> -- 开始 snippet: js hide: false console: true false -->

$ git rm -r --cached .
$ git add .
$ git commit -m 'Update .gitignore'

<!--结束片段-->

[![PM控制台][1]][1] 那么这个问题就会彻底解决。

[1]: https://i.stack.imgur.com/RO5DV.png

评论(0)

作为一个通知。

如果你觉得.gitignore不能正常工作(所以添加了foo/*文件夹,但git status仍然显示该文件夹的内容被修改或类似的东西),那么你可以使用这个命令。

git checkout -- foo/*

评论(0)

实际上,没有一个答案对我有效。 唯一对我有效的是(在Linux上)。

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

git version 2.18.0 
评论(1)

对于2.13.3及以后的版本,在你的.gitignore文件中只写bin就可以忽略bin及其所有子目录和文件。

bin

评论(0)

在.gitignore文件中加入**/bin/,我就成功了(注意。 bin文件夹没有添加到索引中)。)

评论(0)

如果.gitignore内的模式以斜杠/结尾,它将只找到与目录匹配的内容,换句话说,bin/将匹配目录bin及其下面的路径,但不会匹配普通文件或符号链接bin

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


如果模式不包含斜线,比如bin,Git会将其视为shell glob模式(贪婪)。 所以最好是使用简单的/bin

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

评论(1)