首页 > 解决方案 > Git状态未检测到更改,但“git update-index --really-refresh”确实

问题描述

我的项目中有 3 个文件夹。其中 2 个用 检测到变化git status,但第 3 个检测到变化,Server/, 没有。

git update-index --no-assume-unchanged Server/返回

Ignoring path Server/

奇怪的是,

git update-index --assume-unchanged Server/返回

Ignoring path Server/以及。

在 git status 之后,更改仍然不显示。但是,跑步会git update-index --really-refresh显示它们;我怎样才能像平常一样git status展示它们?

谢谢!

标签: git

解决方案


以, like结尾的路径永远不能在索引中命名文件。这样的路径命名一个目录(或文件夹,如果您更喜欢该术语)。/Server/

与许多面向用户的命令不同,git update-index它是一个非常基本的管道命令,并且无法仅通过命名目录来操作目录中的所有文件。所以如果你给它一个目录的名字——即使是一个不存在的——它只会像上面一样抱怨:

$ git update-index --no-assume-unchanged abcdefg/
Ignoring path abcdefg/

尽管完全没有abcdefg/文件,甚至没有abcdefg目录:

$ file abcdefg/
abcdefg/: cannot open `abcdefg/' (No such file or directory)

如果您确实有文件Server/并希望在索引中当前存在的这些文件的条目上设置这些索引标志,则必须单独命名每个此类文件:

$ git ls-files --stage builtin/
100644 dd18e5c9b67038307401e8d33970d5c424c03cb7 0       builtin/add.c
100644 761cac39e02a7f45dd7f95f05d31e0ad373be214 0       builtin/am.c
100644 da413ae0d178b53d6b1e6c193577c23923255245 0       builtin/annotate.c
100644 3f099b960565ff2944209ba514ea7274dad852f5 0       builtin/apply.c
[many more lines, snipped]

要设置或清除每个索引条目上的假设不变标志,您(或我)必须git update-index为每个此类文件调用一次。有 112 个这样的文件,因此需要 112 次调用git update-index.

git update-index通常直接使用它几乎总是表明您做错了什么。如果您设置了许多假设未更改的标志,那可能是真正的错误;您必须单独取消设置它们才能修复它。我做到了编写我自己的Python 脚本来处理这类事情,部分是作为实验,部分是在我处理经常设置和清除标志的糟糕情况时。现在总体情况已得到纠正,但我仍然有脚本。)


推荐阅读