当您从远程存储库中提取时,Git具有忽略已更改文件的功能。那是git update-index --assume-unchanged yourFileName。我只想知道如何知道文件是否已使用此标志设置。但是我在google中找不到任何东西。
答案 0 :(得分:1)
要查看哪些文件具有"假设未更改"位设置,使用
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
表示它在缓存中。这当然对于任何文件都是如此在缓存中设置了一个位。这应该包括标记为删除[H
或CE_REMOVE_WT
]的文件,尽管1 << 22
不会显示它们,即使使用git ls-files
,这似乎是一个错误。)