忽略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',我不希望这些文件和目录被忽略 :)
1169
14
在1.8.2版本之前,
**
在.gitignore
中没有任何特殊含义。从1.8.2开始,git支持**
表示零或多个子目录(见发布说明)。忽略目录树中低于当前级别的所有被称为bin的目录的方法是用一个
.gitignore
文件,其模式为:。在 "man "页面,有一个使用类似模式忽略名为 "foo "的目录的例子。
编辑: 如果你的git索引中已经有任何bin文件夹,而你不想再追踪它们,那么你需要明确删除它们。Git不会因为已经被追踪的路径与新的".gitignore "模式匹配而停止追踪。只从索引(--缓存)中执行文件夹删除(rm),循环(-r)。根bin文件夹的命令行示例。
你梦想中的".gitignore "似乎是这样的。
在顶层。
我觉得对于git初学者来说,这是值得一提的。
因此,如果你想在编辑.gitignore之后,添加忽略本地仓库中的一些目录(这些目录已经存在),你需要在你的根目录上运行这个命令。
它基本上会'刷新&39。 你的本地repo和取消stage忽略的文件。
参见。
http://git-scm.com/docs/git-rm,
https://help.github.com/articles/ignoring-files/
**
以前从来没有正常工作过,但自从 [git 1.8.2 (March, 8th 2013)][1]之后,它似乎被明确提及并得到支持。在您的例子中,这意味着这一行可能会被支持。
[1]: https://github.com/git/git/blob/master/Documentation/RelNotes/1.8.2.txt#L85-L88
大写和小写都匹配
我没有看到这里提到,但这似乎是区分大小写的。一旦我改成/Bin,文件就会像预期的那样被忽略。
[Bb]in
可以解决这个问题,但... 这里有一个更广泛的列表,你应该忽略的东西(GitExtension的示例列表)。如果你正在为任何Visual Studio (.NET)解决方案寻找一个伟大的全局
.gitignore
文件,我推荐你使用这个文件。 https://github.com/github/gitignore/blob/master/VisualStudio.gitignore.gitignore
文件。AFAIK它有最全面的.NET项目的
.gitignore
。第1步:将以下内容添加到.gitignore.文件中。 在.gitignore.文件中添加以下内容。
<!--开始片段。 js hide: false console.true babel: true true babel.false --> -- begin snippet: js hide: false console: true false -->
用户专用文件
<!--结束片段-->
第2步。 确保生效
如果问题仍然存在,那是因为.gitignore中的设置只能忽略原来没有跟踪的文件。 如果有些文件已经被版本控制系统收录,那么修改.gitignore是无效的。 要彻底解决这个问题,需要打开Git Bash或Package Manager Console**(见下图截图),在版本库根目录下运行以下命令。
<!--开始 snippet: js hide: false console.true babel: true true babel.false --> -- 开始 snippet: js hide: false console: true false -->
<!--结束片段-->
[![PM控制台][1]][1] 那么这个问题就会彻底解决。
[1]: https://i.stack.imgur.com/RO5DV.png
作为一个通知。
如果你觉得
.gitignore
不能正常工作(所以添加了foo/*
文件夹,但git status
仍然显示该文件夹的内容被修改或类似的东西),那么你可以使用这个命令。git checkout -- foo/*
。实际上,没有一个答案对我有效。 唯一对我有效的是(在Linux上)。
对于2.13.3及以后的版本,在你的.gitignore文件中只写bin就可以忽略bin及其所有子目录和文件。
在.gitignore文件中加入**/bin/,我就成功了(注意。 bin文件夹没有添加到索引中)。)
如果
.gitignore
内的模式以斜杠/
结尾,它将只找到与目录匹配的内容,换句话说,bin/
将匹配目录bin
及其下面的路径,但不会匹配普通文件或符号链接bin
。换句话说,
bin/
将匹配一个目录bin
和它下面的路径,但不会匹配一个常规文件或符号链接bin
。如果模式不包含斜线,比如
bin
,Git会将其视为shell glob模式(贪婪)。 所以最好是使用简单的/bin
。bin
并不是这个问题的最佳解决方案。