Git status没有检测到更改,但“git update-index --really-refresh”可以

py49o6xq  于 2023-11-15  发布在  Git
关注(0)|答案(1)|浏览(136)

我的项目中有3个文件夹。其中2个检测到git status的更改,但第三个,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像正常一样显示它们?

omqzjyyz

omqzjyyz1#

一个以/结尾的路径,比如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]


要设置或清除每个索引条目上的assume-unchanged标志,您(或我)必须为每个这样的文件调用一次git update-index。有112个这样的文件,因此需要112次对git update-index的调用。
(直接使用git update-index,这通常是你做错了什么的信号。如果你设置了许多假定不变的标志,那可能是真实的错误;你必须单独取消设置它们来修复它。我确实写了自己的Python script来处理这类事情,一部分是作为一个实验,一部分是当我处理一个糟糕的情况时,我经常设置和清除标志。整体情况现在已经纠正,但我仍然有脚本。)

相关问题