我可以得到标记为-假定未更改的文件列表吗?


325

我标记--assume-unchanged为什么?有什么办法可以找出我使用该选项所藏的东西吗?

我浏览了.git/目录,看不到任何看起来像我期望的东西,但是它必须在某个地方。我已经忘记了几周前以这种方式标记的内容,现在我需要为以后的开发人员记录这些详细信息。

Answers:


449

您可以使用git ls-files -v。如果打印的字符是小写字母,则文件被标记为假定不变。

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

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

42
git ls文件-v | grep ^ [az]
Matt R

17
我的操作系统显然具有奇怪的排序规则设置,因此Matt的命令对我不起作用。这是我在“ [alias]我的” 部分下添加的内容.gitconfigignored = !git ls-files -v | grep "^[[:lower:]]"
Abe Voelker

15
[az]不起作用的原因是shell将其扩展为通配符;如果当前目录包含与该模式匹配的文件(即单个小写字母),则该扩展名就是该文件的名称。尝试添加引号,例如“ [az]”
DomQ 2012年

7
git ls文件-v | grep -e“ ^ [az]”
Amir Ali Akbari

12
建议的别名可用于在当前目录及以下目录中查找未更改的文件。如果您想要存储库中所有“假定不变”文件的列表,则需要git ls-files -v `git rev-parse --show-toplevel` | grep "^[a-z]"
Trebor Rude

65

一线

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

1
易于记忆的好别名:)谢谢
PlagueHammer

1
以下是一些更灵活的变体:hidden = "!f() { git ls-files -v \"$@\" | grep \"^[a-z]\"; }; f"ignored = "!f() { git status -s --ignored \"$@\" | grep \"^!!\"; }; f"。例如,这允许git ignored -- PATH1 PATH2仅列出某些路径中的被忽略文件(在您有很多被忽略文件时很有用)。
sls

感谢您的别名
-MOHRE

22

该命令对我来说更加一致。它将仅打印列为“假定未更改”的文件。

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

我已经在不同的环境中使用了很多次,并且效果很好。


5
在Windows提示符下,使用grep "^h"的,而不是单引号
beautifulcoder

7

PowerShell解决方案,使用Select-String \ sls

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

3

Windows命令行解决方案,使用findstr

git ls-files -v | findstr /B h
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.