2014-03-19 59 views
5

我經常使用git log -p <file>git log -p <directory>以獲得文件或文件集中更改的綜合摘要。它輸出影響文件的提交歷史記錄,以及每次提交的統一差異。相當於「git log -p」的p4命令行?

使用Perforce我可以做p4 changes <file>p4 changes <directory>/...來獲取提交列表。但似乎沒有選擇顯示相應的差異。

有沒有我可以使用的Perforce等價物?如果shell腳本是必需的,一個完整的工作函數將是很好的。

如果你想知道爲什麼我錯過了功能,這裏有幾件事情,git log -p讓我迅速做非常

  • 什麼是最後.cpp文件進行修改?
  • 找到字符串FOO已被添加到文件中的所有提交。
  • 函數剛被棄用;其他開發人員用其替代了什麼?
  • 一般來說,只要知道最近在給定的目錄中發生了什麼。
+0

這是因爲你想建立你自己的歷史查看工具嗎?爲什麼不使用P4V的延時視圖?精彩的工具!如果你想建立你自己的工具,結合'變化'和'描述'應該讓你在那裏。學習如何爲您的命令使用「已標記」模式,或者使用其中一種Perforce腳本API進行調查。 –

+0

時間推移視圖是一個體面的工具,但它只是GUI。它也具有非常有限的搜索功能,並且一次只支持一個文件。我將添加幾個'git log -p'在實用性方面給我帶來的例子。 –

回答

4

這裏有一個合理的近似:

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默認爲