在哪里可以找到显示已设置为“假定未更改”的所有文件的文件列表?

时间:2016-11-23 08:17:14

标签: git

当您从远程存储库中提取时,Git具有忽略已更改文件的功能。那是git update-index --assume-unchanged yourFileName。我只想知道如何知道文件是否已使用此标志设置。但是我在google中找不到任何东西。

2 个答案:

答案 0 :(得分:1)

根据documentation

  

要查看哪些文件具有"假设未更改"位设置,使用git ls-files -v

-v代表的位置:

  

-t类似,但对于标记为假设未更改的文件使用小写字母。

因此,文件名前面的小写字母表示此文件标记为"假设未更改"。 git-ls-files也接受文件名作为参数,因此您可以按如下方式使用它:

git ls-files -v <file-name>

答案 1 :(得分:0)

据我所知,只有--debug的{​​{1}}和-v标志才能看到这些位。 git ls-files的输出故意没有很好地记录,而--debug的输出与-v的输出相关联,被称为&#34;半弃用&#34;。

我在-t上设置了假设未更改的标志,并在Git的Git存储库中的wt-status.c上设置了skip-worktree标志。这里有一点wt-status.h输出,带有各种标志;在git ls-files上设置的假设未更改标记为wt-status.c

0x8000

正如您在此处所见,$ git ls-files --debug ... wt-status.c ctime: 1479501926:0 mtime: 1479501926:0 dev: 127 ino: 11320057 uid: 1001 gid: 1001 size: 63601 flags: 8000 wt-status.h ctime: 1479501926:0 mtime: 1479501926:0 dev: 127 ino: 11320058 uid: 1001 gid: 1001 size: 3534 flags: 40004000 (使用skip-worktree set)具有标记wt-status.h,它们是:

0x40004000

(我在这里跳过了不适用的标志:它们从#define CE_EXTENDED (0x4000) #define CE_SKIP_WORKTREE (1 << 30) 开始,这是阶段号码掩码,通过0x3000。有些似乎只在核心中使用,有些则保存在实际上-disk index。)

尝试设置 1 << 31 assume-unchanged有效,但必须分两步完成:

--skip-worktree

(尝试同时设置两者,只设置其中一个)。以下$ git update-index --assume-unchanged ws.c $ git update-index --skip-worktree ws.c $ git ls-files --debug -- ws.c ws.c ctime: 1451486045:0 mtime: 1451486045:0 dev: 127 ino: 11319929 uid: 1001 gid: 1001 size: 9782 flags: 4000c000 显示了这些内容:

git ls-files -v

(我包含了一个没有设置标志的额外文件,以显示如何在此处显示:$ git ls-files -v -- ws.c wt-status.c wt-status.h xdiff-interface.h s ws.c h wt-status.c S wt-status.h H xdiff-interface.h 表示它在缓存中。这当然对于任何文件都是如此在缓存中设置了一个位。这应该包括标记为删除[HCE_REMOVE_WT]的文件,尽管1 << 22不会显示它们,即使使用git ls-files,这似乎是一个错误。)