能给我一份标记为,假设不变的文件列表吗?

我把什么标记为--assume-unchanged?有没有办法用这个选项找出我藏了什么?

我已经挖掘了.git/目录,没有看到任何看起来像我所期望的,但它一定在某个地方。我已经忘记了几周前这样标记的内容,现在我需要为未来的开发人员记录这些细节。

52298 次浏览

你可以使用git ls-files -v。如果打印的字符是小写,则文件标记为assume-unchanged。

只打印未更改的文件使用:

git ls-files -v | grep '^[[:lower:]]'

要拥抱你的懒惰程序员,将其转换为git别名。编辑你的.gitconfig文件来添加这个片段:

[alias]
ignored = !git ls-files -v | grep "^[[:lower:]]"

现在输入git ignored将会得到如下输出:

h path/to/ignored.file
h another/ignored.file

这个命令对我来说更有效。它将只打印列出为“假设-不变”的文件。

git ls-files -v|grep "^h"

我在不同的环境中使用过很多次,效果非常好。

一个衬套

git ls-files -v | grep "^[a-z]"

使用别名

恕我直言,git hidden更适合标记为--assume-unchanged的文件:

git config --global alias.hidden '!git ls-files -v | grep "^[a-z]"'

下面是我在~/.gitconfig中拥有的相关别名列表:

[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
unhide-all = update-index --really-refresh
hidden = !git ls-files -v | grep \"^[a-z]\"
ignored = !git status -s --ignored | grep \"^!!\"

要使它在子目录中工作并支持参数:

  hidden = "!f(){ git -C \"$GIT_PREFIX\" ls-files -v \"$@\" | grep \"^[a-z]\";}; f"
ignored = "!f(){ git -C \"$GIT_PREFIX\" status -s --ignored \"$@\" | grep \"^!!\";}; f"

例如:

 # cd target
# git ignored classes

关于文件状态

对我来说,大多数隐藏的文件都标有标志h,尽管根据git-ls-files-v的手册,实际上还有其他几个标志:

-v
Similar to -t, but use lowercase letters for files that are
marked as assume unchanged (see git-update-index(1)).

关于git ls-files-t:

This option (-t) identifies the file status with the following tags
(followed by a space) at the start of each line:


H   cached
S   skip-worktree
M   unmerged
R   removed/deleted
C   modified/changed
K   to be killed
?   other

PowerShell解决方案,使用选择字符串\ sls

git ls-files -v | sls -pattern ^h -casesensitive

使用Windows命令行解决方案:

git ls-files -v | findstr /B h