忽略git项目中的任何"bin"目录

Ben*_*ers 1172 git gitignore

我有这样的目录结构:

.git/
.gitignore
main/
  ...
tools/
  ...
...
Run Code Online (Sandbox Code Playgroud)

在主要工具和工具以及任何其他目录中,可以有一个"bin"目录,我想忽略它(我也想忽略它下面的所有内容).我在.gitignore中尝试了这些模式中的每一种,但它们都不起作用:

/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #and the others with just * at the end too
Run Code Online (Sandbox Code Playgroud)

谁能帮我吗?如果我这样做,第一个模式(我认为应该工作的模式)工作得很好:

/main/**/bin/**/*
Run Code Online (Sandbox Code Playgroud)

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

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

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

CB *_*ley 1749

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

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

bin/
Run Code Online (Sandbox Code Playgroud)

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

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

git rm -r --cached bin
Run Code Online (Sandbox Code Playgroud)

  • 从git 1.8.2开始,git将接受`.gitignore`文件中的`**`(来源:[1.8.2 changelog](https://github.com/git/git/blob/master/Documentation/RelNotes/ 1.8.2.txt)) (72认同)
  • @Nisba,它们不同,`bin`将忽略名为bin的文件,而`bin /`则用于名为bin的目录 (25认同)
  • `bin`和`bin /`相同? (12认同)
  • 因为我摔倒了这个:git-command中的文件夹名称是区分大小写的:)"bin!= Bin" - 也许我通过这个提示多余了几分钟:) (7认同)

Mic*_*ker 455

.gitignore你的梦想似乎是:

bin/
Run Code Online (Sandbox Code Playgroud)

在顶层.

  • @GAlexander,为什么要全局忽略 bin/ 目录?他们通常有版本化的内容。并且全局忽略不会影响存储库的其他用户。 (2认同)

pla*_*cys 216

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

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

git rm --cached

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

git rm --cached -r .
git add .
Run Code Online (Sandbox Code Playgroud)

它将基本上"刷新"您的本地存储库并取消暂停忽略的文件.

看到:

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

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


Von*_*onC 69

**始终无法正常工作之前,但因为git的1.8.2(三月8日2013) ,它似乎被明确提及,并支持:

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

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

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

/main/**/bin/
Run Code Online (Sandbox Code Playgroud)


wis*_*cky 46

[Bb]in/
Run Code Online (Sandbox Code Playgroud)

匹配大写和小写

  • 应该这样做,@ Gank:`Bin /``!bin /` (4认同)
  • `[B] in /`是唯一的大写 (2认同)

Cor*_*ory 32

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

  • 虽然不是答案,但它确实增加了搜索同一问题的其他人的完整性(我自己,刚才). (47认同)
  • 这不是原来明确关于`bin`而不是`Bin`的问题的答案. (3认同)

Jai*_*der 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*/
Run Code Online (Sandbox Code Playgroud)

  • 注意:这样的东西应该在你的GLOBAL gitignore中(通常在你的主目录中).项目gitignore应该只忽略你的项目特有的东西(即C应用程序的.o文件). (3认同)

Joc*_*ick 17

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

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

  • 这并没有真正回答这个问题,但这正是我所寻求的. (5认同)

Bra*_*ung 16

第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/
Run Code Online (Sandbox Code Playgroud)

第2步:确保生效

如果问题仍然存在,那是因为.gitignore中的设置只能忽略最初未跟踪的文件.如果某些文件已包含在版本控制系统中,则修改.gitignore无效.要完全解决此问题,您需要打开Git BashPackage Manager Console(请参见下面的屏幕截图),以便在存储库根文件夹中运行以下命令.

$ git rm -r --cached .
$ git add .
$ git commit -m 'Update .gitignore'
Run Code Online (Sandbox Code Playgroud)

PM控制台 然后问题就会彻底解决.


Ant*_*nyC 12

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

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

git version 2.18.0 
Run Code Online (Sandbox Code Playgroud)


Nik*_*kar 7

对于 2.13.3 及更高版本,在 .gitignore 文件中仅写入 bin 应该忽略 bin 及其所有子目录和文件

垃圾桶


K-G*_*Gun 5

作为通知;

如果您认为.gitignore某种方式不起作用(因此foo/*在其中添加了文件夹,但git status仍显示该文件夹内容已修改或类似),则可以使用此命令;

git checkout -- foo/*