git diff-files的效果是什么--diff-filters = A?

问题描述 投票:2回答:1

git-diff-files(1)的文档说

仅选择已添加(A),复制(C),删除(D),修改(M),重命名(R)的文件,其类型(即常规文件,符号链接,子模块,...)已更改(T), Unmerged(U),Unknown(X),或者他们的配对破碎(B)......

但是,以下命令不显示添加的文件(不要在带有origin子目录的目录中运行它):

start=$PWD
origin="$start/origin"

rm -rf $origin
mkdir $origin
cd $origin
touch 1.txt
echo "2" > 2.txt
git init
git add -A
git commit -m "init"

echo "1" > 1.txt
rm 2.txt
echo "3" > 3.txt
git diff-files --diff-filter=ADM

输出如下:

$ git diff-files --diff-filter=ADM
:100644 100644 e69de... 0000... M      1.txt
:100644 000000 0cfbf... 0000... D      2.txt

git diff-files从未显示添加的文件吗? diff-filter选项表明它能够选择添加的文件。

git
1个回答
3
投票

确实git diff-files永远不会显示添加的文件。

diff-files命令显示索引与工作副本中的文件之间的差异。根据定义,尚未添加到索引的文件(通过git add)将不会成为索引的一部分,因此不会显示在索引和工作副本之间的任何差异中。只是将文件添加到索引将使索引和工作副本中的文件相同,因此索引和工作副本之间没有任何区别,因此也不会显示在diff-files中。修改工作副本中添加的文件将直接导致M状态。

文档显示所有可能的--diff-filter参数的原因是diff选项文档在所有采用diff选项的命令之间共享(diff-filesdiff-indexdiff-treeformat-patchlogshow)。他们各自的文档只包括diff-options文档:

include::diff-options.txt[]

例如在this line of the git-diff-files documentation source中看到过。共同的diff-options然后有共享的--diff-filter文本starting here

因为在构建文档时会处理这些文件,如条件所示

ifndef::git-format-patch[]

--diff-filter文档上方的行中,可以想象可以为diff-files命令改变文本(或者增加以说明某些参数不适用的事实)。向git项目打开错误报告以进行此更改可能有意义。

© www.soinside.com 2019 - 2024. All rights reserved.