忽略git项目中的任何“bin”目录

时间:2009-09-24 09:13:52

标签: git gitignore

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

.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',我不希望忽略它们。)

16 个答案:

答案 0 :(得分:1655)

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

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

bin/

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

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

git rm -r --cached bin

答案 1 :(得分:440)

你梦想的.gitignore似乎是:

bin/

在顶层。

答案 2 :(得分:200)

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

  

如果您已经签入了文件,并且想要忽略它, Git   如果稍后添加规则,则不会忽略该文件。在那些情况下,你   首先必须在你的文件中运行以下命令来解开文件   终端:

     

git rm --cached

因此,如果您希望在编辑.gitignore之后添加忽略本地存储库中的某些目录(已存在),您希望在根目录上运行此目录

git rm --cached -r .
git add .

它基本上会刷新'您的本地repo和unstage忽略的文件。

请参阅:

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

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

答案 3 :(得分:69)

**以前从未正常工作,但自git 1.8.2 (March, 8th 2013)以来,似乎已明确提及并支持:

  

.gitignore.gitattributes个文件中的模式可以**/,作为匹配0个或更多级别的子目录的模式。

     

E.g。 " foo/**/bar"匹配" bar" in" foo"本身或在" foo"。

的子目录中

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

/main/**/bin/

答案 4 :(得分:45)

[Bb]in/

匹配大写和小写

答案 5 :(得分:31)

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

答案 6 :(得分:24)

[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*/

答案 7 :(得分:17)

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

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

答案 8 :(得分:11)

第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 无效。 要完全解决此问题,您需要打开 Git Bash 程序包管理器控制台(请参阅下面的屏幕截图),以便在存储库根文件夹中运行以下命令。

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

PM console 然后问题就会彻底解决。

答案 9 :(得分:5)

作为通知;

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

git checkout -- foo/*

答案 10 :(得分:3)

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

  

<强>仓

答案 11 :(得分:3)

从字面上看,没有一个答案对我真正有效。唯一对我有用的是(在Linux上):

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

git version 2.18.0 

答案 12 :(得分:1)

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

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


如果模式不包含斜杠,如bin中所述,Git会将其视为外壳Glob模式(贪婪)。因此最好是使用简单的/bin

bin并不是解决此特定问题的最佳解决方案。

答案 13 :(得分:0)

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

答案 14 :(得分:0)

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

答案 15 :(得分:0)

除了@CB Bailey 的回答:

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

我添加了

et-cache/

.gitignore 文件。但是

git rm -r --cached et-cache

导致错误:

<块引用>

致命:pathspec 'et-cache' 不匹配任何文件

所以解决方案是使用powershell:

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

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