【问题标题】:List the directories added or removed between two git commits列出两次 git 提交之间添加或删除的目录
【发布时间】:2017-11-01 10:33:10
【问题描述】:

我可以使用类似的命令

git diff --stat <commit-hash-1> <commit-hash-2>

git diff --name-status <commit-hash-1> <commit-hash-2>

(例如,来自herehere)列出两次提交之间已更改的文件,但我将如何列出目录? IE。如何列出两次提交之间添加或删除的目录?

注意有一个措辞相似的问题here,但问题和答案包括文件,我只想要目录。

【问题讨论】:

  • 你试过 gitk 吗?你必须先安装它
  • 如果可能的话,我希望使用 git / bash 解决方案
  • 目录不是 git 对象,因此没有引用目录的内置命令。您需要创建一个基于上述命令或类似命令的脚本。

标签: git


【解决方案1】:

this answer 一样,您需要

  • 处理git diff --stat 的输出以获取文件夹的名称
  • 检查是否
    • 该文件夹存在于&lt;commit-hash-1&gt; 而不是&lt;commit-hash-2&gt;(意味着该路径的 ls-files 未列出任何文件)
    • 已删除文件夹的反面

在 Git 2.31(2021 年第一季度)中,“git {diff,log} --{skip,rotate}-to=&lt;path&gt;”允许用户丢弃早期路径的差异输出或将它们移动到输出的末尾。

因此您可以订购文件夹顺序输出,以便以最佳预期方式处理所述输出。

参见 Junio C Hamano (gitster)commit 1eb4136(2021 年 2 月 11 日)。
(由 Junio C Hamano -- gitster -- 合并到 commit 845d603,2021 年 2 月 25 日)

diff: --{rotate,skip}-to=

在 "git difftool"(man) 的实现中,有一种情况是用户希望从特定路径开始查看差异并继续查看其余部分,可选回到开头。
由于实现诸如“git diff(man) 输出的后处理步骤这样的功能有点麻烦,让我们在内部通过两个新选项来支持它。

  • git diff --rotate-to=C(man),当生成的补丁将显示路径 A B C D E 而没有选项时,会将路径“旋转”以显示补丁到 C D E A B
    如果没有显示C 的补丁,则会出现错误。
  • "git diff --skip-to=C"(man) 将跳过C 之前的路径,并显示C D E 的补丁。
    同样,当没有显示C 的补丁时,这是一个错误。
  • "git log [-p]"(man)" 也接受这两个选项,但是如果指定路径没有变化就不会报错。
    而是将输出路径集旋转或跳过到指定路径或在指定路径之后排序的第一个路径。

diff-options 现在包含在其man page 中:

--skip-to=&lt;file&gt;

--rotate-to=&lt;file&gt;

从输出中丢弃命名之前的文件 (即“跳到”),或将它们移动到输出的末尾 (即“旋转到”)。这些主要是为了使用而发明的 git difftool 命令,可能不是很有用 否则。

gitdiffcore 现在包含在其man page 中:

diffcore-rotate:用于更改输出开始的路径

此转换采用一个路径名,并旋转一组 文件对,以便给定路径名的文件对首先出现, 可选地丢弃它之前的路径。这是使用 实现--skip-to--rotate-to 选项。这是 当指定的路径名​​不在文件对集中时出错, 但与“git log”系列一起使用时出错是没有用的 命令,因为期望给定路径是不合理的 将被“git log”显示的每个提交修改 命令。

因此,当与“git log”一起使用时,文件对 与给定的排序相同或排序后的第一个 路径名是输出开始的地方。

将此转换与 diffcore-order 结合使用将产生 出乎意料的结果,因为这种转换的输入很可能 diffcore-order 生效时未排序。

您也可以恢复差异:

在 Git 2.31(2021 年第一季度)中,“git difftool(man) 学习了 --skip-to=&lt;path&gt; 选项以从任意路径重新启动中断的会话。

参见ZheNing Hu (adlternative)commit 1c88102(2021 年 2 月 19 日)。
(由 Junio C Hamano -- gitster -- 合并到 commit 6eea44c,2021 年 2 月 25 日)

difftool.c: 学习一种从指定文件开始的新方法

签字人:胡哲宁

git difftool(man)只允许我们依次选择要查看的文件。
如果有很多文件的提交并且我们在中间退出,我们将不得不再次遍历列表以获取我们想要查看的文件差异。
因此,教命令一个选项--skip-to=&lt;path&gt; 以允许用户说早期路径的差异不感兴趣(因为它们已经在早期会话中看到)并使用命名路径开始此会话。

git difftool 现在包含在其man page 中:

--rotate-to=&lt;file&gt;

开始显示给定路径的差异, 它将移动到结束并输出之前的路径。

--skip-to=&lt;file&gt;

开始显示给定路径的差异,跳过所有 之前的路径。

【讨论】:

    猜你喜欢
    • 2020-08-19
    • 2014-01-02
    • 2020-07-18
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    相关资源
    最近更新 更多