git - 如何列出 git 存储库中的所有文本(非二进制)文件?

标签 git text-files

我有一个包含许多自动生成的源文件的存储库,我在 .gitattributes 中标记为“二进制”(它们被 checkin ,因为不是每个人都可以访问生成器工具)。此外,repo 在被忽略的目录中有很多源代码文件(同样,作为构建过程的一部分生成),以及一些实际的二进制文件(例如图标等小资源文件)。

我现在想在存储库中找到所有非自动生成和非忽略的文件。我原以为我会用 find 和一堆排除项来做这件事,但现在我有一个可怕的 find 语句,里面有十几个子句(而且它仍然不完美做的工作)。 git ls-files 可以工作,但会向我显示所有没有区别的二进制文件,我必须过滤掉这些文件。

所以,我想知道:是否有一个我可以运行的简单命令,它列出了 checkin 存储库的每个文件,以及哪个 git 认为是“文本”文件?

最佳答案

git grep --cached -Il ''

列出所有非空的常规(无符号链接(symbolic link))文本文件:

  • -I:不匹配二进制文件中的模式
  • -l:只显示匹配的文件名,不显示匹配的行
  • '':空字符串使git grep匹配任何非空文件
  • --cached:也可以找到用git add添加但还没有提交的文件(可选)

或者您可以使用 How to determine if Git handles a file as binary or as text?在一个带有 git ls-files 的 for 循环中。

TODO 空文件。

改为查找所有二进制文件:Find all binary files in git HEAD

在 Git 2.16.1 上测试 this test repo .

关于git - 如何列出 git 存储库中的所有文本(非二进制)文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18973057/

相关文章:

html - html 片段的文件扩展名

git - 如何列出 `git` 中特定版本的文件?

git - 如何控制 Handlebars 如何生成换行符?

rebase - 如何以尽可能少的冲突将我的功能分支重新设置为 git 中的开发分支?

git - 如何在不使用 Github 的情况下使用 Git 在项目中进行协作?

batch-file - 从文本文件中读取 - 批处理

ruby - 有没有办法删除文本文件中与特定文本匹配的行?

r - 您可以在read.table中指定列数吗?

git - 更改 Git 存储库的根目录

Python 搜索文本文件并替换