6
git log -p .

仅在当前目录中,但不在子目录中

相等的

svn log --diff --depth files .

可能吗?

4

3 回答 3

2

怎么样:

$ git log -p file1 file2 ...

或者,如果它们太多而无法输入:

$ find . -maxdepth 1 -type f | xargs git log -p
于 2015-09-12T21:43:57.570 回答
0

在 Linux 等上,您可以仅列出当前目录中的文件:

ls -p | grep -v /

所以:

git log -p `ls -p | grep -v /`

是一种方法。

于 2015-09-12T23:26:53.467 回答
0

像这样的东西会起作用:

git log --all --pretty=format: --name-only --relative="$(git rev-parse --show-prefix)" -- . | sed '/\//d ; /^[[:space:]]*$/d' | sort | uniq | xargs git log -p --
  • 第一个 git 命令列出了每个文件,包括已删除的文件。每次更改时,每个文件都会列出一次。将--relative删除不在此目录中的文件,并从文件名中删除子目录前缀。
  • Sed 删除不在当前目录中的那些(即不包含斜杠的)。这是有效的,因为我们在上一步中删除了 subdir 前缀。它还会删除空行。
  • 排序和 uniq 删除重复项。
  • 现在我们有了感兴趣的文件列表,xargs 会将它们传递给git log -p. 是必需的--,否则它将不知道如何处理已删除的文件。

这似乎是完成任务的一种低效方式,但我认为 git 没有“每个文件”的概念,它只有当前的文件集和差异列表。因此,您必须遍历每个更改集才能获得完整列表。

于 2020-09-28T20:25:57.180 回答