我有一个这样的目录结构:
.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”,我不希望这些被忽略:)
**
语法似乎现在(2013 年 3 月,git 1.8.2)正式记录:见 my answer below
~/.cvsignore
是有益的。其他版本控制系统使用这个名称,使其更加“全球化”。
在 1.8.2 版本之前,**
在 .gitignore
中没有任何特殊含义。从 1.8.2 开始,git 支持 **
表示零个或多个子目录(参见 release notes)。
忽略目录树中当前级别以下任何位置的所有名为 bin 的目录的方法是使用具有以下模式的 .gitignore
文件:
bin/
在 man
页面中,有一个使用类似模式忽略名为 foo
的目录的示例。
编辑: 如果您的 git 索引中已经有任何您不想再跟踪的 bin 文件夹,那么您需要明确删除它们。 Git 不会仅仅因为它们现在匹配新的 .gitignore
模式而停止跟踪已经被跟踪的路径。从仅索引 (--cached) 递归执行文件夹删除 (rm) (-r)。根 bin 文件夹的命令行示例:
git rm -r --cached bin
您梦想的 .gitignore
似乎是:
bin/
在顶层。
我认为对于 git 初学者来说值得一提:
如果您已经签入了一个文件,并且您想忽略它,那么如果您稍后添加规则,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/
git add -A
,我可以用它来代替吗?我也可以在第一行用 -A 替换点吗?
**
以前从未正常工作,但自 git 1.8.2 (March, 8th 2013) 以来,它似乎被明确提及和支持:
.gitignore 和 .gitattributes 文件中的模式可以有 **/,作为匹配 0 级或更多级别子目录的模式。例如,“foo/**/bar”匹配“foo”本身或“foo”子目录中的“bar”。
在您的情况下,这意味着现在可能支持此行:
/main/**/bin/
[Bb]in/
匹配大小写
[B]in/
是唯一的大写
Bin
文件夹忽略并让 bin
提交到 git? [B]in/
将同时提交 Bin
和 bin
。
Bin/
!bin/
我没有看到这里提到它,但这似乎是区分大小写的。一旦我更改为 /Bin,文件就会按预期被忽略。
bin
而不是 Bin
的原始问题的答案。
第 1 步:将以下内容添加到文件 .gitignore。
# 用户特定文件 *.suo *.user *.userosscache *.sln.docstates # 构建结果 [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ bld/ [Bb ]in/ [Oo]bj/ # Visual Studio 2015 缓存/选项目录 .vs/
第二步:确保生效
如果问题仍然存在,那是因为 .gitignore 中的设置只能忽略最初未跟踪的文件。如果版本控制系统中已经包含了一些文件,那么修改 .gitignore 是无效的。要彻底解决此问题,您需要打开 Git Bash 或包管理器控制台(见下面的屏幕截图)以在存储库根文件夹中运行以下命令。
git rm -r --cached 。混帐添加。 git commit -m "更新 .gitignore"
https://i.stack.imgur.com/RO5DV.png
[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*/
如果您正在为任何 Visual Studio (.NET) 解决方案寻找一个出色的全局 .gitignore
文件 - 我建议您使用这个:https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
AFAIK 它为 .NET 项目提供最全面的 .gitignore
。
从字面上看,没有一个答案对我有用。唯一对我有用的是(在 Linux 上):
**/bin
(yes without the / in the end)
git version 2.18.0
bin
的所有文件夹?
对于 2.13.3 及更高版本,仅在 .gitignore 文件中写入 bin 应忽略 bin 及其所有子目录和文件
垃圾桶
作为通知;
如果您认为 .gitignore
不能以某种方式工作(因此在其中添加了 foo/*
文件夹,但 git status
仍显示该文件夹内容已修改或类似),那么您可以使用此命令;
git checkout -- foo/*
将 **/bin/ 添加到 .gitignore 文件对我有用(注意:bin 文件夹未添加到索引中)。
除了@CB Bailey 的回答:
我试图从索引中删除多个名为 et-cache
的文件夹(在子文件夹中)(来自 Wordpress divi 主题的缓存文件夹)并被跟踪。
我添加了
et-cache/
到 .gitignore
文件。但
git rm -r --cached et-cache
导致错误:
致命:pathspec 'et-cache' 不匹配任何文件
所以解决方案是使用powershell:
Get-ChildItem et-cache -Recurse |% {git rm -r --cached $_.FullName}
这将搜索所有名为 et-cache 的子文件夹。然后使用每个文件夹路径(全名)将其从 git 中的跟踪中删除。
如果 .gitignore
中的模式以斜杠 /
结尾,它只会找到与目录匹配的内容。
换言之,bin/
将匹配目录 bin
及其下的路径,但不会匹配常规文件或符号链接 bin
。
如果模式不包含斜线,就像在 bin
中一样,Git 将其视为 shell glob 模式(贪婪)。所以最好使用简单的/bin
。
bin
不是解决此特定问题的最佳解决方案。
/
开头吗?
在我的情况下 gitignore 文件的编码有问题,检查它是否是 UTF-8
不定期副业成功案例分享
.gitignore
文件中的**
(来源:1.8.2 changelog)bin
与bin/
相同吗?bin
将忽略名为 bin 的文件,而bin/
用于名为 bin 的目录