p4命令行相当于“git log -p”?

时间:2014-03-19 11:07:16

标签: git command-line diff perforce

我经常使用git log -p <file>git log -p <directory>来全面了解文件或文件集中的更改。它输出影响文件的提交历史记录,以及每个提交的统一差异。

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

我可以使用Perforce等效项吗?如果需要shell脚本,那么完全正常工作的函数会很好。

如果你想知道为什么我会错过这个功能,这里有一些git log -p让我快速非常的事情:

  • 要修改的最后一个.cpp文件是什么?
  • 查找已将字符串FOO添加到文件中的所有提交。
  • 一个刚被弃用的函数;其他开发人员用什么替换它?
  • 一般来说,只知道最近在给定目录中发生的事情。

1 个答案:

答案 0 :(得分:5)

这是一个合理的近似值:

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 etc]:输出完整的更改说明和差异。 -du指定统一的diff格式,它最接近git的diff格式。

xargs -i p4 describe -du {}:运行describe命令,将所有更改编号作为参数。

less -F:如果页面超过一个屏幕,则转到终端。 Git默认管道输出的大部分输出为-F