在 Git 中,如何获取从一个版本到另一个版本的文件更改的详细列表?

发布于 2024-11-08 13:45:04 字数 358 浏览 3 评论 0原文

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

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

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

可能吗? --name-status 似乎也不表示重命名和副本。

I use a Git repository on my server to version user data files sent to the server. I'm interested in getting a list of changed files between any two revisions.

I know about git diff --name-only <rev1> <rev2>, but this only gives me a list of file names. I'm especially interested in renames and copies, too. Ideally, the output would be something like this:

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

Is it possible? --name-status also doesn't seem to indicate renames and copies.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

半夏半凉 2024-11-15 13:45:04
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相同。

--find-copies-harder

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


brauliobo 推荐在评论中

git diff --stat -C
git show --stat -C
git log --stat -C
git diff --name-status -C <rev1> <rev2>

should be closer to what you are looking for.

--name-status would display the file names and their respective status:

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

Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R),
type (i.e. regular file, symlink, submodule, …) changed (T),
Unmerged (U), Unknown (X), or pairing Broken (B)

(to which the OP Jean Philippe Pellet adds:

The status letters R and C “are always followed by a score denoting the percentage of similarity between the source and target of the move or copy, and are the only ones to be so".
)

Regarding files copied or moved:

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

Detect copies as well as renames. If n is specified, it has the same meaning as for -M<n>.

--find-copies-harder

For performance reasons, by default, -C option finds copies only if the original file of the copy was modified in the same changeset.
This flag makes the command inspect unmodified files as candidates for the source of copy.
This is a very expensive operation for large projects, so use it with caution. Giving more than one -C option has the same effect.


brauliobo recommends in the comments:

git diff --stat -C
git show --stat -C
git log --stat -C
阳光的暖冬 2024-11-15 13:45:04

我相信``会显示该信息

git diff -M -C --stat

I believe `` will show that information

git diff -M -C --stat
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文