我可以获得标记为--assume-unchanged的文件列表吗?

Rob*_*son 305 git

我标记--assume-unchanged为什么?有没有办法找出我用这个选项隐藏的东西?

我已经挖掘了.git/目录并且没有看到任何看起来像我期望的东西,但它必须在某个地方.我忘记了几周前我用这种方式标记的内容,现在我需要为未来的开发人员记录这些细节.

And*_*ett 431

你可以用git ls-files -v.如果打印的字符是小写的,则文件标记为假设未更改.

要仅打印未更改的文件,请使用:

git ls-files -v | grep '^[[:lower:]]'
Run Code Online (Sandbox Code Playgroud)

要拥抱懒惰的程序员,请将其转换为git别名.编辑您的.gitconfig文件以添加此代码段:

[alias]
    ignored = !git ls-files -v | grep "^[[:lower:]]"
Run Code Online (Sandbox Code Playgroud)

现在打字git ignored会给你这样的输出:

h path/to/ignored.file
h another/ignored.file
Run Code Online (Sandbox Code Playgroud)

  • git ls-files -v | grep ^ [az] (42认同)
  • 我的操作系统显然有一个奇怪的整理设置,所以马特的命令对我不起作用.这是我在`.gitconfig`的`[alias]`部分下添加的内容:`ignored =!git ls-files -v | grep"^ [[:lower:]]"` (16认同)
  • [az]不起作用的原因是shell将其扩展为通配符; 如果当前目录包含与该模式匹配的文件(即单个小写字母),则扩展名为该文件的名称.尝试添加引号,例如"[az]" (15认同)
  • 建议的别名用于在当前目录及其下方查找未更改的文件.如果你想要一个存储库中所有"假设未更改"文件的列表,你需要`git ls-files -v \`git rev-parse --show-toplevel \`| grep"^ [az]"` (12认同)
  • git ls-files -v | grep -e"^ [az]" (7认同)
  • 我会将别名称为“hide”或“show-hidden”而不是“ignored”,因为“ignore”可能意味着“.gitignore”中定义的被忽略的文件 (2认同)

rye*_*nus 59

一个班轮

git ls-files -v | grep "^[a-z]"
Run Code Online (Sandbox Code Playgroud)

使用别名

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

git config --global alias.hidden '!git ls-files -v | grep "^[a-z]"'
Run Code Online (Sandbox Code Playgroud)

这是我所拥有的相关别名列表~/.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 \"^!!\"
Run Code Online (Sandbox Code Playgroud)

使其在子目录和支持参数中工作:

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

例如:

 # cd target
 # git ignored classes
Run Code Online (Sandbox Code Playgroud)

关于文件状态

对我来说,大多数隐藏文件都标有标志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)).
Run Code Online (Sandbox Code Playgroud)

关于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
Run Code Online (Sandbox Code Playgroud)

  • 好记的别名 :) 谢谢 (2认同)

ear*_*l3s 22

这个命令对我来说更加一致.它将仅打印列为"假设未更改"的文件.

git ls-files -v|grep "^h"
Run Code Online (Sandbox Code Playgroud)

我已经在不同的环境中使用了很多次,它运行得很好.

  • 在Windows提示符下,使用`grep"^ h"`而不是单引号 (5认同)

Vov*_*ova 8

使用findstr 的Windows 命令行解决方案:

git ls-files -v | findstr /B h
Run Code Online (Sandbox Code Playgroud)


Tho*_*owk 7

PowerShell解决方案,不使用grep

git ls-files -v | sls -pattern ^h -casesensitive
Run Code Online (Sandbox Code Playgroud)