检查gitignore将跟踪哪些文件

时间:2018-12-19 20:41:41

标签: git

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

2 个答案:

答案 0 :(得分:3)

这里必须要小心,因为git add -A标志已经改变了Git 1.x和Git 2.x之间的含义。请参见Difference between "git add -A" and "git add .",然后向下滚动至this answer (or click this link),以了解我的意思。

对于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或其变体之一来比较索引和工作树,并使用diff过滤器来检测已删除的文件。)

(合并两个列表以获取所有内容。)

答案 1 :(得分:1)

'error'

本来是我最好的猜测,但我在这里的一个回购协议上尝试了一下,但无济于事:-/似乎没有考虑我的.gitignore。

也许行之有效吗?