1

我在我的 gitignore 中放了一些文件夹,但如文档中所述

gitignore 文件指定了 Git 应该忽略的故意未跟踪的文件。Git 已跟踪的文件不受影响

所以我必须取消跟踪一些文件,这是我噩梦的开始

这是我的 gitignore 文件

$ cat .gitignore
/.settings/
/.buildpath
/configuration.php
/administrator/cache/*
/images/*
/connectionOracle.php
/administrator/components/com_jsecure/*
/administrator/language/en-GB/*

在此文件中所做的最后修改是添加了 /images/* 行

要取消跟踪此文件夹,我按照此处的 {1}此处的 {2}所述进行操作

关注{1}

$ git update-index --assume-unchanged images/*
fatal: Unable to mark file images/02102012_planos.jpg

问题1:为什么无法取消跟踪这个特定文件?

关注{2}

$ git rm --cached images/ -r
fatal: pathspec 'images' did not match any files

与特定文件相同的结果

$ git rm --cached images/20130626tabela1.jpg
fatal: pathspec 'images/20130626tabela1.jpg' did not match any files

问题 2:为什么我会收到此错误消息?在这里搜索将我引向这一点,但正如我所说,/images/ 下的这些文件被跟踪。

还有蛋糕樱桃

为了验证被忽略的文件列表,我运行了这个命令

$git ls-files --others -i --exclude-standard

这给了我图像、管理员和 mpdf61 文件夹中很长的文件列表。mpdf61 文件夹没有在 gitignore 文件中配置,也没有在 info/exclude 中配置。

Question 3: Why the mpdf61 appears in this list?
4

1 回答 1

3

注:“跟踪”是指“在索引中”。“未跟踪”表示“不在索引中”。如果文件也被忽略,则通常会抑制未跟踪文件的显示,因此有些人更喜欢将状态为“未跟踪和已忽略”的文件称为“已忽略”,悄悄掩盖其“未跟踪”-ness。请注意,索引不需要与当前HEAD提交匹配:这就是您通过更改索引来准备下一次提交的方式。这些更改仅在您进行提交以及进行该提交更新的行为后才成为永久提交的一部分HEAD


$ git update-index --assume-unchanged images/*
fatal: Unable to mark file images/02102012_planos.jpg

问题1:为什么无法取消跟踪这个特定文件?

您无法取消跟踪它,因为它没有被跟踪。此外,git update-index --assume-unchanged首先不会取消跟踪文件。为了update-index更新“假设不变”位,文件必须在索引中,以便update-index更新。fatal第一个这样的未跟踪(不在索引中)文件会发生此错误。由 shell 的扩展命名的任何后续文件都不会发生任何其他事情*,因为update-index它只是在第一个错误之后停止。

(例如,如果您运行git update-index --assume-unchanged red.txt blue.jpg green.svg,并且两者red.txtgreen.svg 在索引blue.jpg中,而不在索引中,update-index则会将索引条目标记为 ,red.txt但不标记为green.svg。)


$ git rm --cached images/20130626tabela1.jpg
fatal: pathspec 'images/20130626tabela1.jpg' did not match any files

问题 2:为什么我会收到此错误消息?

因为该文件也未被跟踪(不在索引中),因此无法从索引中删除。这个:

$ git rm --cached images/ -r
fatal: pathspec 'images' did not match any files

表示索引中没有 images/文件(现在)。(也许有些是之前的,因此在HEAD提交中,但在较早的成功之后不再是git rm --cached;如果是这样,它们应该显示 git status为“已删除”。)


$ git ls-files --others -i --exclude-standard

这给了我图像、管理员和 mpdf61 文件夹中很长的文件列表。mpdf61 文件夹没有在 gitignore 文件中配置,也没有在 info/exclude 中配置。

问题 3:为什么 mpdf61 会出现在这个列表中?

大概是因为那些文件被忽略了。如文档中所示,共有三个“标准”排除文件类git ls-files

--exclude-standard
添加标准的 Git 排除:.git/info/exclude,每个目录中的        .gitignore ,以及用户的全局排除文件

(所有重点都是我的)。您说的是“该”(如一个)gitignore 文件,但可能有很多,包括目录mpdf61本身中的一个,并且您可能已经core.excludesFile配置了一个。

要查找忽略特定文件的忽略指令,请使用git check-ignore -v. git check-ignore参阅文档

于 2016-12-16T22:57:16.983 回答