Git日志的-r选项有什么作用?

Jür*_*gen 8 git git-log

手册页git-log(1)说:

-r
显示递归差异。

因此,我们可以用另一种方式提出这个问题:

在这种情况下,“递归差异”是什么意思。

从@phd 获得此答案后,我做了一些针对指示方向的测试:

如果我在当前版本的Git源存储库(最近从https://github.com/git/git.git克隆)中执行以下命令并签出master(当前指向commit 6a6c0f1),它们将给出相同的输出:

git log --name-only -m
git log --name-only -m -r
Run Code Online (Sandbox Code Playgroud)

(对于这个工作,人们可能不得不增加diff.renameLimit对周围3150)。我试图与Git的版本2.10.2和2.17.1获得平等的结果。

另外,命令

git log --name-only -m master~..master
Run Code Online (Sandbox Code Playgroud)

输出

commit 6a6c0f10a70a6eb101c213b09ae82a9cad252743
Author: Junio C Hamano <gitster@pobox.com>
Date:   Thu May 9 00:37:54 2019 +0900

    The eighth batch

    Signed-off-by: Junio C Hamano <gitster@pobox.com>

Documentation/RelNotes/2.22.0.txt
Run Code Online (Sandbox Code Playgroud)

从最后一行可以看到,即使没有,该命令也会进入子目录-r

phd*_*phd 5

该选项来自git diff-tree文档并且git diff-tree确实有效;看这个例子:

$ git diff-tree master~ master
:100644 100644 a2be0e5e5959396fb85445cfff714d7b04a1231b 5d7a2a0a4fd6fbaf439aa08bb7f17052a65a5236 M  ANNOUNCE
:100644 100644 22e746900ab77a79b4cb6780f536a517771fe276 f2aae0e9c7c87226f4f5c06ca006f4d04ce79dc1 M  ChangeLog
:040000 040000 54ef4d981c00162085347031d31286d630258153 76d21516ed54422a8981a31a9a0bf47dc5e5af6f M  mimedecode

$ git diff-tree -r master~ master
:100644 100644 a2be0e5e5959396fb85445cfff714d7b04a1231b 5d7a2a0a4fd6fbaf439aa08bb7f17052a65a5236 M  ANNOUNCE
:100644 100644 22e746900ab77a79b4cb6780f536a517771fe276 f2aae0e9c7c87226f4f5c06ca006f4d04ce79dc1 M  ChangeLog
:100644 100644 4ca2f25d2d061dba16294d67ab8018ea00be2b37 ead1ab38493c7e5119d8204a8731747cc534647c M  mimedecode/mimedecode.py
Run Code Online (Sandbox Code Playgroud)

该选项包含在git-diff-tree.txt 的文档中,并且该文件通过 diff-options.txt 包含在git-log.txt中。

我怀疑在文档中包含该选项git log是文档生成的产物。至少我不能让这个选项对我有用git log

  • 事实上,这是 Git 文档(和 Git 命令)的一个普遍问题:它们共享源代码,因此可以提供最终没有效果的选项,和/或记录没有效果的选项,或者在某些情况下,文档因式分解是不明智的,尽管我认为其中大部分已经随着时间的推移而得到修复——实际上被命令拒绝了。 (2认同)