我有一个巨大的git回购,最终想用bfg清理。
但首先,我想跟踪并删除HEAD
中的文件,git将其视为二进制文件。。。
所以,我要找的是一个命令,它可以在HEAD中找到git视为二进制的所有文件。
这些都没有帮助:
- List all text (non-binary) files in repo<我正在寻找二进制文件。而不是文本文件。
- 我只关心头部
- http://git.661346.n2.nabble.com/git-list-binary-and-or-non-binary-files-td3506370.html<我尝试了这些命令,但没有用。
提前感谢你的帮助。
5条答案
按热度按时间dw1jzc5e1#
细分:
git grep -c ''
打印存储库中每个文件的名称和行数。添加-I
选项会使命令忽略二进制文件。diff <(cmd1) <(cmd2)
使用进程替换为diff
提供命名管道,通过这些管道发送cmd1
和cmd2
的输出。grep
和cut
命令用于从diff
的输出中提取文件名。fnvucqvd2#
基于@jangler(https://stackoverflow.com/a/30690662/808101)答案的简化解决方案
说明:
git grep
-l
要求只打印与模式''
匹配的文件名(该模式应与每个文件的每行匹配)-I
此选项使命令忽略二进制文件-a
此选项强制将二进制文件当作文本处理sort -u
对grep的结果进行排序,因为comm
只处理已排序的文件comm -13
列出第二个列表中唯一的文件(git grep
列表中包含所有文件,包括二进制文件)64jmpszr3#
下面是使用PowerShell的Windows的相同脚本:
或者用简短的形式:
这需要
O(n^2)
才能完成,这是使用哈希表更快的方法:这需要
O(n)
才能完成。vhipe2zx4#
说明:
git grep -Il ''
:列出git认为是文本的所有非空常规文件。另请参阅:如何列出git存储库中的所有文本(非二进制)文件?git grep -al ''
:列出所有非空常规文件,包括二进制文件grep -Fvxf
:选择文件2中没有出现在文件1中的行,因此只选择Git认为是二进制的非空文件。参见:How to remove the lines which appear on file B from another file A?还要考虑添加了
git add
但尚未提交的文件:或者您可以使用How to determine if Git handles a file as binary or as text?对
git ls-files
执行for循环使用this test repo在Git 2.16.1上测试。
np8igboo5#
快速、简单、不确定准确度:
git ls-files -eol
标记为
i/-text
的任何内容都可能被视为二进制文件。