繁体   English   中英

忽略 git 项目上的任何“bin”目录

[英]ignoring any 'bin' directory on a git project

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

.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.8.2 版本之前, **.gitignore没有任何特殊含义。 从 1.8.2 开始,git 支持**表示零个或多个子目录(请参阅发行说明)。

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

bin/

man页中,有一个使用类似模式忽略名为foo的目录的示例。

编辑:如果您的 git 索引中已经有任何您不再希望跟踪的 bin 文件夹,那么您需要明确删除它们。 Git 不会仅仅因为它们现在匹配新的.gitignore模式而停止跟踪已经被跟踪的路径。 仅从索引( --cached )递归( -r )执行文件夹删除( rm )。 根 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 1.8.2 (March, 8th 2013)以来,似乎明确提到并支持它:

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

例如,“ foo/**/bar ”匹配“ bar的”“ foo ”本身或在“子目录foo ”。

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

/main/**/bin/
[Bb]in/

匹配大小写

我没有看到这里提到它,但这似乎是区分大小写的。 一旦我更改为 /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/

第二步:确保生效

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

 git rm -r --cached . git add . git commit -m "Update .gitignore"

下午控制台 那么问题就彻底解决了。

[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 它拥有最全面的.gitignore用于 .NET 项目。

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

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

git version 2.18.0 

作为通知;

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

git checkout -- foo/*

对于 2.13.3 及以后的版本,在 .gitignore 文件中只写 bin 应该忽略 bin 及其所有子目录和文件

垃圾桶

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

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

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


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

bin不是这个特定问题的最佳解决方案。

在我的情况下,gitignore 文件的编码有问题,请检查它是否为 UTF-8

除了@CB Bailey 的回答:

我试图从索引和跟踪中删除多个名为et-cache (来自 Wordpress 主题的缓存文件夹)的文件夹(在子文件夹中)。

我加了

et-cache/

.gitignore文件。

git rm -r --cached et-cache

导致错误:

致命:路径规范“et-cache”与任何文件都不匹配

所以解决方案是使用powershell:

Get-ChildItem et-cache -Recurse |% {git rm -r --cached $_.FullName}

这将搜索所有名为 et-cache 的子文件夹。 然后使用每个文件夹路径(全名)将其从 git 中的跟踪中删除。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM