[英]GIT ignoring files in project/bin/debug folder except few files (Visual Studio Project)
[英]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 .
它基本上会“刷新”您的本地存储库并取消暂存忽略的文件。
看:
**
以前从未正常工作过,但自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 Bash或Package 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 divi主题的缓存文件夹)的文件夹(在子文件夹中)。
我加了
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.