git - Git - 为什么我的源文件被忽略?
问题描述
我正在使用 git 版本 2.15.0.windows.1
我的 gitignore 文件中有以下内容:
#BAM
**/*[Bb][Aa][Mm]/*
!**/*[Bb][Aa][Mm]/*.btt
!**/*[Bb][Aa][Mm]/*.xls
!**/*[Bb][Aa][Mm]/*.xlsx
我的理解是第三行告诉 git 跟踪匹配以 *.btt 结尾的模式的文件。由于前面的原因,这是一个不要忽略的!
我的问题是,我的文件eformsV2.btt被忽略了。我使用了git check-ignore命令,它返回的模式如下所示:
文档(git doc)建议 check-ignore 仅显示它认为被忽略的文件的路径 - 这是正确的,但为什么是! 模式的前缀不会导致文件被跟踪?
解决方案
我的问题是该文件是否实际上被忽略了。(Gitcheck-ignore
会告诉你哪个规则匹配一个文件,即使那是“不要忽略”规则。)
我创建了一个测试目录并将您的示例文件复制.gitignore
到其中,然后创建了两个子目录:
$ mkdir eforms eforms/eformsV2.Bam
$ cd eforms/eformsV2.Bam/
$ touch ignoreme
$ touch eformsV2.btt
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
../
$ git status -uall
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
eformsV2.btt
nothing added to commit but untracked files present (use "git add" to track)
git check-ignore -v eformsV2.btt
.gitignore:3:!**/*[Bb][Aa][Mm]/*.btt eformsV2.btt
除了我跑了git status
两次并显示(第二个,更详细的-uall
变体)eformsV2.btt
未被忽略的事实之外,这似乎与您的屏幕截图相匹配。
运行在不显示目录git status -uall
时很有用,因为此时您所知道的是:目录中的某些文件不在索引中,但它们也没有被忽略。高层的观点更有意义:git status
-uall
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
eforms/
nothing added to commit but untracked files present (use "git add" to track)
由于它本身没有被跟踪的文件——即使这些文件位于子目录 中也是如此——Git 将所有此类文件的列表缩写为简单的,而不是。但是指向告诉您为什么不忽略文件的行。eforms/
eforms
eforms/
eforms/eformsV2.Bam/
git check-ignore -v
另请注意,是否存在路径名.gitignore
并不影响文件是否被实际跟踪。这是由文件是否在索引中严格控制的。如果路径名存储在索引中,则跟踪文件;如果路径名不在索引中,则文件未被跟踪。该.gitignore
条目主要告诉 Git 是否应该抱怨未跟踪的文件。(在某些情况下,它还有一个副作用是允许 Git 破坏文件。)
推荐阅读
- python-3.x - 硒没有点击
- javascript - 转义字符的行为不同
- php - 从 php 文件访问样式表
- c# - 如何使用 Swagger 测试 base64 序列化 PDF 的返回
- excel - 从 VBA EXCEL 宏中查找所有打开的 Word 应用程序
- android - 如何使用数据绑定正确地进行事件处理
- c++ - 从 C++ 或 VB 调用时,WMIC 返回未找到文件 - 命令行有效
- codeigniter - 电子邮件主题行以“?utf-8?Q?”开头 在代码点火器项目中
- vert.x - 用于射频通信的 Vertx 自定义服务器/套接字
- ios - 如何为 NSFetchedResultsController 定义具有泛型类型的协议?