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

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


当前回答

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

#用户特定的文件 * .suo * .user * .userosscache * .sln.docstates #构建结果 (Dd) ebug / (Dd) ebugPublic / (Rr)抽/ (Rr)抽/ x64 / x86 / bld / (Bb) / (Oo) bj / # Visual Studio 2015缓存/选项目录 .vs /

第二步:确保生效

如果问题仍然存在,那是因为.gitignore中的设置只能忽略最初没有跟踪的文件。如果一些文件已经包含在版本控制系统中,那么修改.gitignore是无效的。 要完全解决这个问题,您需要打开Git Bash或Package Manager Console(见下面的截图),在存储库根文件夹中运行以下命令。

Git rm -r——cached。 Git添加。 git commit -m "Update .gitignore"

这样问题就完全解决了。

其他回答

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

#用户特定的文件 * .suo * .user * .userosscache * .sln.docstates #构建结果 (Dd) ebug / (Dd) ebugPublic / (Rr)抽/ (Rr)抽/ x64 / x86 / bld / (Bb) / (Oo) bj / # Visual Studio 2015缓存/选项目录 .vs /

第二步:确保生效

如果问题仍然存在,那是因为.gitignore中的设置只能忽略最初没有跟踪的文件。如果一些文件已经包含在版本控制系统中,那么修改.gitignore是无效的。 要完全解决这个问题,您需要打开Git Bash或Package Manager Console(见下面的截图),在存储库根文件夹中运行以下命令。

Git rm -r——cached。 Git添加。 git commit -m "Update .gitignore"

这样问题就完全解决了。

作为通知;

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

Git checkout——foo/*

你梦中的。gitignore似乎是:

bin/

在顶层。

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

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


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

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

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