27

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

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

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

是否可以?--name-status似乎也没有表示重命名和副本。

4

2 回答 2

32
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指定,则与 for 的含义相同-M<n>

--find-copies-harder

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


brauliobo在评论中建议:

git diff --stat -C
git show --stat -C
git log --stat -C
于 2011-05-19T11:48:35.320 回答
3

我相信``会显示该信息

git diff -M -C --stat
于 2011-05-19T11:47:01.627 回答