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

标签 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 所在的所有提交已添加到文件中。
  • 一个函数刚刚被弃用;其他开发人员用什么替换了它?
  • 一般来说,只知道给定目录中最近发生的事情。

最佳答案

这是一个合理的近似值:

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 将其大部分输出通过管道传输

关于git - p4 命令行相当于 “git log -p” ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22503860/

相关文章:

git - 如何获取/pull 与通配符字符串匹配的多个分支?

php - 将 cURL 命令行转换为 PHP

linux - 命令行日志文件中时间的分箱直方图

带有仅检查文件名选项的比较工具?

git - 从无到有创建一个 git diff

arrays - 在 scala 中,如何获取两个数组中从未显示的元素的数量?

git - 检查是否可以使用 git merge-base 执行快进 merge 的正确方法是什么?

Git 将不同的分支推送到 github

git - Git Flow 应该如何与 QA 一起测试发布和新功能?

linux - 在命令行中将参数传递给 ksh 脚本时转义反引号 - grave(`)