首页 > 解决方案 > 检查 gitignore 将跟踪哪些文件

问题描述

我想要一个基于我编写的文件的工作树中将被跟踪的所有文件的列表(例如,git add -A如果我的工作树中的每个文件都已更改,则会添加).gitignore

标签: git

解决方案


这里必须小心,因为git add -A标志在 Git 1.x 和 Git 2.x 之间改变了含义。请参阅“git add -A”和“git add”之间的区别。并向下滚动到此答案(或单击此链接)以了解我的意思。

对于 Git 2.x,已经跟踪的文件(已经在索引中)将继续在索引中。使用-A将忽略工作树中丢失的任何文件。(对于 1.x,使用-A将从工作树中丢失的索引文件中删除。)

此时您可以做几件不同的事情,具体取决于您想要的结果,主要以 为中心git ls-files,其中:

  • 读取索引,所以它现在知道里面有什么
  • 可选地读取工作树,以便它也知道那里有什么
  • 可选择读取指定的排除文件或标准的排除文件

该命令可以限制为显示:

  • 现有的跟踪文件:-c--cached
  • 已跟踪但已在工作树中修改的文件:-m--modified
  • 工作树中但不在索引中的文件(未跟踪):-o--others
  • 被或将被忽略的文件:-i--ignored

必须将这些选项与 结合使用--exclude-standard才能git ls-files遵守与git add. 所以:

git ls-files --exclude-standard --other

将为您提供当前未跟踪但将由git add -A. 它不会为您提供当前跟踪的文件,将由git add -A;添加。要获得这些,请使用git ls-files --modified. (假设所有文件都已被修改,请使用--cached- 但这不会考虑丢失的工作树文件。如果你想这样做,它相当棘手,你最好的选择是使用 git diff ,或其变体之一,比较索引和工作树,使用差异过滤器来检测已删除的文件。)

(结合这两个列表来获取所有内容。)


推荐阅读