本文共 2647 字,大约阅读时间需要 8 分钟。
我有这样的目录结构:
.git/.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”,我不想忽略它们:)
您梦dream .gitignore
似乎是:
bin/
在顶层。
在1.8.2版之前, **
在.gitignore
没有任何特殊含义。 从1.8.2开始,git支持**
表示零个或多个子目录(请参见 )。
忽略目录树中当前级别以下任何位置的所有名为bin的目录的方法是使用.gitignore
文件,其模式如下:
bin/
在man
页中,有一个使用类似模式忽略名为foo
的目录的示例。
编辑:如果您已经不再希望跟踪git索引中的任何bin文件夹,则需要显式删除它们。 Git不会仅仅因为它们现在匹配新的.gitignore
模式而停止跟踪已经被跟踪的路径。 递归地( -r )从索引( --cached )仅执行文件夹删除( rm )。 根bin文件夹的命令行示例:
git rm -r --cached bin
我没有看到这里提到的内容,但这似乎区分大小写。 一旦更改为/ Bin,文件将按预期被忽略。
**
以前从未正常运行过,但是自以来,似乎已明确提及并支持它:
.gitignore
和.gitattributes
文件中的模式可以具有**/
,作为与0或更高级别的子目录匹配的模式 。例如,“
foo/**/bar
”匹配“bar
”中的“foo
”本身或在“子目录foo
”。
就您而言,这意味着现在可以支持此行:
/main/**/bin/
[Bb]in/
匹配大写和小写
[Bb]in
将解决问题,但是...这里是您应该忽略的更广泛的事情列表(GitExtension的示例列表):
#ignore thumbnails created by windowsThumbs.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*/*.sbrobj/[Rr]elease*/_ReSharper*/
作为通知;
如果您认为.gitignore
不能以某种方式工作(因此在其中添加了foo/*
文件夹,但是git status
仍显示该文件夹的内容已被修改或类似的内容),则可以使用此命令;
git checkout -- foo/*
我认为对于git初学者来说值得一提:
如果您已经签入了文件,并且想要忽略它, 那么以后再添加规则时, Git将不会忽略该文件 。 在这种情况下,必须首先通过在终端中运行以下命令来取消跟踪文件:
git rm --cached
因此,如果要在编辑.gitignore之后添加忽略本地存储库中某些目录(已经存在)的目录,则希望在根目录下运行该目录
git rm --cached -r .git add .
基本上,它将“刷新”您的本地存储库并取消暂存被忽略的文件。
看到:
,
如果您正在为任何Visual Studio(.NET)解决方案寻找一个出色的全局.gitignore
文件-我建议您使用此文件: :
AFAIK对于.NET项目具有最全面的.gitignore
。
将** / bin /添加到.gitignore文件中对我来说很成功(注意:bin文件夹未添加到索引中)。
对于2.13.3及更高版本,仅在.gitignore文件中写入bin应该忽略该bin及其所有子目录和文件
箱子
步骤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或Package Manager控制台 (请参见下面的屏幕截图)以在存储库根文件夹中运行以下命令。
$ git rm -r --cached . $ git add . $ git commit -m 'Update .gitignore'
这样问题就可以彻底解决了。
从字面上看,没有一个答案对我真正有用。 唯一对我有用的是(在Linux上):
**/bin(yes without the / in the end)git version 2.18.0
如果.gitignore
内部的模式以斜杠/
结束,它将仅找到与目录匹配的内容。
换句话说, bin/
将匹配目录bin
及其下的路径,但不会匹配常规文件或符号链接bin
。
如果该模式不包含斜杠 (例如bin
Git中的斜线) ,则Git将其视为外壳glob模式(贪婪)。 所以最好是使用简单的/bin
。
bin
并不是解决此特定问题的最佳解决方案。
转载地址:http://zxogj.baihongyu.com/