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


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

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


980
2017-09-24 09:13


起源


可能有人会觉得有帮助:如果你有很少的存储库并且每个都有相同的.gitignore文件,你可以把它放到“公共”位置并启动> git config --global core.excludesfile~ / .gitignore_global最后一个参数是路径到了共同的位置。附:我是git的新手,不确定这是否是“最佳做法”建议。如果您不想这样做,请告诉我。谢谢。 - Budda
该 ** 语法似乎现在(2013年3月,git 1.8.2)正式记录:请参阅 我的答案如下 - VonC
如果有人想阅读实际手册页的最新版本,请参阅 gitignore(5)手册页。


答案:


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

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

bin/

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

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

git rm -r --cached bin

1477
2017-09-24 09:35



从git 1.8.2开始,git将接受 ** 在 .gitignore 文件(来源: 1.8.2更改日志) - Carlos Campderrós
是 bin 同样的 bin/ ? - Nisba
@Nisba,他们不同, bin 将忽略名为bin的文件 bin/ 用于名为bin的目录 - Rani Kheir
谢谢,我需要删除git索引一旦我不再希望跟踪它们。 - Julian89757
因为我摔倒了这个:git-command中的文件夹名称是区分大小写的:)“bin!= Bin” - 也许我通过这个提示几分钟就让别人:) - dba


.gitignore 你的梦想似乎是:

bin/

在顶层。


400
2017-09-24 09:16



是的,bin / works,你得到额外的投票赞成你的评论;) - Ben Hymers
嘿,谢谢Bombe,现在'/'就在答案中;-) - Michael Krelin - hacker
非常感谢你的帮助,不要忘记检查被忽略的文件示例:git checkout bin * - Chris Sim
把它放在gitignore_global中 - μολὼν.λαβέ
@GAlexander,为什么要全局忽略bin /目录?他们经常有版本化的内容。全局忽略不会影响存储库的其他用户。 - Michael Krelin - hacker


对于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/


177
2018-05-13 08:54





** 从来没有正常工作,但从那以后 git 1。8。2(2013年3月8日),它似乎被明确提及和支持:

中的模式 .gitignore 和 .gitattributes 档 可以有 **/,作为匹配0或更多级别子目录的模式

例如。 “foo/**/bar“ 火柴 ”bar“在”foo“本身或在”子目录“foo”。

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

/main/**/bin/

68
2018-04-23 09:20



自我注意:另见 stackoverflow.com/a/20391855/6309 - VonC


[Bb]in/

匹配大写和小写


43
2017-08-30 05:32



[B]in/ 成为唯一的大写 - Gank
怎么样才让 Bin 文件夹忽略并让 bin 承诺给git? [B]in/ 都会承诺 Bin 和 bin。 - Gank
应该这样做,@ Gank: Bin/  !bin/ - Marco G


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


31
2017-10-08 22:00



这不是对明确提出的原始问题的答案 bin不是 Bin。 - CB Bailey
虽然不是答案,但它确实增加了搜索同一问题的其他人的完整性(我自己,刚才)。 - Jay


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

23
2018-01-03 00:23



注意:这样的东西应该在你的GLOBAL gitignore中(通常在你的主目录中)。项目gitignore应该只忽略你的项目特有的东西(即C应用程序的.o文件)。 - BraveNewCurrency
好的清单谢谢你。你还应该添加.svn / - manit


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

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


16
2017-07-30 14:33



这并没有真正回答这个问题,但这正是我所寻求的。 - dave


作为通知;

如果你想的话 .gitignore 不起作用(如此添加 foo/* 文件夹里面但是 git status 仍然显示文件夹内容已修改或类似的东西),然后您可以使用此命令;

git checkout -- foo/*


5
2018-02-17 09:33





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

箱子


3
2017-08-03 16:41





第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 然后问题就会彻底解决。


3
2018-06-03 06:46



请在第2步修复拼写错误'comit' - RyanTheCoder
@RyanTheCoder好的,谢谢提醒〜 - Bravo Yeung