我在服务器上使用Git存储库来版本化发送到服务器的用户数据文件。我有兴趣在任何两个版本之间获取已更改文件的列表。
我知道git diff --name-only <rev1> <rev2>
,但这只给了我一个文件名列表。我也对重命名和复制特别感兴趣。理想情况下,输出将是这样的:
updated: userData.txt
renamed: picture.jpg -> background.jpg
copied: song.mp3 -> song.mp3.bkp
有可能吗? --name-status
似乎也不表示重命名和复制。
答案 0 :(得分:27)
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)
状态字母
R
和C
“后面跟着一个分数,表示移动或副本的来源和目标之间的相似性百分比,并且是唯一的”。 )
关于复制或移动的文件:
-C[<n>]
--find-copies[=<n>]
检测副本以及重命名。如果指定
n
,则其含义与-M<n>
相同。
--find-copies-harder
出于性能原因,默认情况下,
-C
选项仅在相同变更集中修改了副本的原始文件时才查找副本。
此标志使命令检查未修改的文件作为副本源的候选者 对于大型项目来说,这是一项非常昂贵的操作,因此请谨慎使用。提供多个-C
选项具有相同的效果。
git diff --stat -C
git show --stat -C
git log --stat -C
答案 1 :(得分:3)
我相信``会显示该信息
git diff -M -C --stat