Git 忽略并取消跟踪文件 [是的,我已经阅读了其他帖子]

Git ignore and untrack file [Yes I already readed the other posts]

我在我的 gitignore 中放置了一些文件夹,但如 documentation

中所述

A gitignore file specifies intentionally untracked files that Git should ignore. Files already tracked by Git are not affected

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

这是我的 gitignore 文件

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

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

要取消跟踪此文件夹,我按照说明进行操作{1}here and {2}here

关注 {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:为什么我会收到这条错误信息?在此处搜索会将我带到 this,但正如我所说,/images/ 下的这些文件已被跟踪。

还有蛋糕樱桃

验证忽略文件列表我运行这个命令

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

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

Question 3: Why the mpdf61 appears in this list?

注:"tracked"表示"in the index"。 "Untracked" 表示 "not in the index"。如果未跟踪文件的显示也被忽略,通常会被抑制,因此有些人更喜欢将状态为 "both untracked and ignored" 的文件称为 "ignored",悄悄地掩饰它们的 "untracked"-ness。请注意,索引不需要匹配当前的 HEAD 提交:这就是您通过更改索引来准备 next 提交的方式。只有在您进行提交后,这些更改才会成为永久提交的一部分,并且进行该提交的行为也会更新 HEAD


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

Question 1: Why can't untrack this specific file?

您无法取消跟踪,因为它未被跟踪。此外,git update-index --assume-unchanged 不会首先取消跟踪文件。对于 update-index 更新 "assume unchanged" 位,文件必须在索引中,以便 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

Question 2: Why I receive this error message?

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

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

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


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

That give me a very long list of files inside the images, administrator and mpdf61 folder. The mpdf61 folder is not configured in the gitignore file and neither in info/exclude.

Question 3: Why the mpdf61 appears in this list?

大概是因为那些文件被忽略了。有3个"standard"排除文件类,如git ls-files文档所示:

--exclude-standard
       Add the standard Git exclusions: .git/info/exclude, .gitignore in each directory, and the user's global exclusion file.

(所有强调我的)。你说 "the" (在一个)gitignore 文件中,但可能有很多,包括目录 mpdf61 本身中的一个,你可能配置了 core.excludesFile

要查找忽略特定文件的忽略指令,请使用 git check-ignore -v。参见 the git check-ignore documentation