【问题标题】:In Git, how do I get a detailed list of file changes from one revision to another?在 Git 中,如何获取从一个修订版到另一个修订版的文件更改的详细列表?
【发布时间】:2011-08-28 19:45:23
【问题描述】:

我使用服务器上的 Git 存储库对发送到服务器的用户数据文件进行版本控制。我有兴趣获取任意两个修订版之间的更改文件列表。

我知道git diff --name-only <rev1> <rev2>,但这只是给我一个文件名列表。我也对重命名和复制特别感兴趣。理想情况下,输出应该是这样的:

updated:  userData.txt
renamed:  picture.jpg -> background.jpg
copied:   song.mp3 -> song.mp3.bkp

有可能吗? --name-status 似乎也不表示重命名和复制。

【问题讨论】:

    标签: git rename file-listing


    【解决方案1】:
    git diff --name-status -C <rev1> <rev2>
    

    应该更接近您正在寻找的东西。

    --name-status 将显示文件名及其各自的状态:

    (A|C|D|M|R|T|U|X|B)
    

    添加 (A)、复制 (C)、删除 (D)、修改 (M)、重命名 (R)、
    类型(即常规文件、符号链接、子模块……)已更改 (T),
    未合并 (U)、未知 (X) 或配对损坏 (B)

    OP Jean Philippe Pellet 添加:

    状态字母RC“后面总是跟着一个分数,表示移动或复制的源和目标之间的相似百分比,并且是唯一的分数”。 )

    关于复制或移动的文件:

    -C[<n>]
    --find-copies[=<n>]
    

    检测副本以及重命名。如果指定了n,则与-M&lt;n&gt;的含义相同。

    --find-copies-harder
    

    出于性能原因,默认情况下,-C 选项仅在副本的原始文件在同一变更集中进行了修改时才查找副本。
    此标志使命令检查未修改的文件作为副本源的候选者。
    对于大型项目,这是一项非常昂贵的操作,因此请谨慎使用。提供多个-C 选项具有相同的效果。


    brauliobo推荐in the comments

    git diff --stat -C
    git show --stat -C
    git log --stat -C
    

    【讨论】:

    • 太好了,这正是我需要的。为了完整起见,我将添加状态字母RC“后面总是有一个分数,表示移动或复制的源和目标之间的相似百分比,并且是唯一的分数” (source)。
    • @Jean-Philippe:好点。我已将其包含在答案中。
    • 谢谢!剩下的唯一部分是如何解释类​​型为XB 的条目...
    • @Jean-Philippe:是的,希望您不必经常解析那种条目;)
    • 我问了一个关于XB 的后续问题there
    【解决方案2】:

    我相信``会显示这些信息

    git diff -M -C --stat
    

    【讨论】:

    • 谢谢!看起来-M 是多余的,因为-C 检测到“复制和重命名”,而--stat 似乎在指定-C 时无效。
    • 好多了,也适用于showlog。谢谢!
    猜你喜欢
    • 2014-07-11
    • 2010-11-07
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    相关资源
    最近更新 更多