"P4"命令行中等价于“git log -p”的命令是什么?

10

我经常使用 git log -p <file>git log -p <directory> 来获取文件或一组文件的变更概要。它输出影响这些文件的提交历史,以及每个提交的统一差异。

使用Perforce,我可以使用 p4 changes <file>p4 changes <directory>/... 来获取提交列表。但似乎没有选项来显示相应的差异。

是否有类似Perforce的功能可供我使用? 如果需要使用shell脚本,一个完全工作的函数会很好。

如果你想知道我为什么需要这个功能,下面是几件事情,git log -p 可以让我非常快速的完成:

  • 上次修改的 .cpp 文件是什么?
  • 查找所有包含字符串 FOO 的提交文件。
  • 一个函数已被弃用,其他开发人员用什么替换它了?
  • 一般来说,只需了解给定目录中最近发生的情况。

这是因为你想要构建自己的历史查看工具吗?为什么不使用P4V的Time Lapse View呢?这是一个非常棒的工具!如果你想要构建自己的工具,将“changes”和“describe”结合起来应该可以实现。学习使用“tagged”模式进行命令,或者研究使用Perforce脚本API之一。 - Bryan Pendleton
1
时间流逝视图是一个不错的工具,但它只有GUI界面。它还具有非常有限的搜索功能,并且一次只支持一个文件。我将添加一些关于git log -p在实用性方面带给我的例子。 - sam hocevar
1个回答

10

这是一个合理的近似:

p4log () {
  p4 changes "$1" | awk '{print $2}' | xargs -i p4 describe -du {} | less -F
}
请注意,与git log -p不同,必须提供参数。您可以提供一个模式,例如p4log ...,递归地运行它以针对当前目录下的所有内容。 详细说明 p4 changes "$1":获取与该模式匹配的文件的单行更改摘要(从最新到最旧)。 awk '{print $2}':提取更改号码。 p4 describe -du CHANGE [$CHANGE2等]:输出完整的更改描述和差异。-du指定统一差异格式,这与git的差异格式最接近。 xargs -i p4 describe -du {}:使用所有更改号码作为其参数运行describe命令。 less -F:如果超过一个屏幕,则分页,否则将其转储到终端。Git默认通过less -F管道传输大部分输出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接