【问题标题】:p4 command line equivalent to “git log -p”?p4 命令行相当于“git log -p”?
【发布时间】:2014-04-25 13:54:54
【问题描述】:

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

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

有我可以使用的 Perforce 等价物吗?如果需要 shell 脚本,那么一个完整的功能会很好。

如果你想知道我为什么错过这个功能,这里有几件事 git log -p 让我非常快速地做到:

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

【问题讨论】:

  • 这是因为您想构建自己的历史查看工具吗?为什么不使用 P4V 的延时视图?很棒的工具!如果您想构建自己的工具,将“更改”与“描述”结合起来应该可以帮助您。学习为您的命令使用“标记”模式,或使用其中一种 Perforce 脚本 API 进行调查。
  • 延时视图是一个不错的工具,但它只是 GUI。它的搜索功能也非常有限,一次只支持一个文件。我将添加一些示例,说明 git log -p 给我带来的实用性。

标签: git command-line diff perforce


【解决方案1】:

这是一个合理的近似值:

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 默认通过 less -F 管道输出大部分输出

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 2012-03-27
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 2010-11-21
    • 1970-01-01
    相关资源
    最近更新 更多