2009-12-29 47 views
14

當我使用「p4 diff」時,它會忽略我已打開添加的文件。是否有可能生成包含添加文件以及更改文件的差異?Perforce - 生成包含添加文件的差異?

+0

'p4 reconcile'會爲你工作嗎? http://www.perforce.com/perforce/doc.current/manuals/cmdref/p4_reconcile.html – P4Shimada 2015-01-30 01:58:10

回答

12

考慮diff in Perforce車廠在客戶工作區的文件進行比較,以修訂,簡單的答案是「不」。
沒有文字記載的歷史比較,爲added file(前提交不提交到庫)

較長的答案會涉及腳本添加的文件的全部內容,完成差異。 (有點像在這個SO question

+0

噢。這是一個恥辱,謝謝你的答案。 – kdt 2010-01-04 23:00:28

3

這是P4差異的已知失蹤的功能,大量的處理Perforce的工具必須解決。

的代碼審查工具Reviewboard自帶的工具post-review。它用於爲代碼視圖創建差異,但如果您願意,它只會執行差異。

它在Python中,你可以拉出來爲自己使用的差異部分。

0

我剛工作圍繞這一問題,並得到了包括在魚眼預提交評論我添加的文件。

我所做的就是複製編輯後的文件的diff hunk描述符標題。這包括一行列出倉庫和本地路徑 - 非常簡單 - 另一行包含範圍信息,格式如here所述。

所以,我添加的每個附加的每個文件的內容涉及diff,每個都由

==== //path/to/depot/file#1 - /path/to/workspace/file ==== 
@@ -1,1 +1,LEN @@ 

其中LEN是在所添加的文件的行數之後。

這對我有效;你的旅費可能會改變。

0

我剛剛得到這個工作,分出了亞倫的答案。取而代之的

==== //path/to/depot/file#1 - /path/to/workspace/file ====

我用

--- //path/to/file [TIMESTAMP GENERATED BY NORMAL DIFF] 
+++ //path/to/file [TIMESTAMP GENERATED BY NORMAL DIFF] 
    @@ -1,1 +1,LEN @@ 

然後確保每個添加行的開頭有一個+

1

我寫這幫助我在Cygwin上:

#!/bin/bash 

if [ $# -ne 1 ]; then 
     echo "usage: $0 <pathSpec>" 
     exit 1 
fi 

pathSpec=$1 

doIt() { 
     p4 opened "$pathSpec" | egrep "#.* - add" | while read f; do 
       # figure out the workspace path 
       depotPath=${f%#*} 
       clientFileLine=$(p4 fstat "$depotPath" | grep clientFile) 
       workspacePathWin=${clientFileLine#... clientFile } 

       # diff output 
       echo ==== $depotPath#1 - $workspacePathWin ==== 
       workspacePath=$(cygpath "$workspacePathWin") 
       lineCount=$(wc -l < "$workspacePath") 
       echo @@ -0,0 +1,$lineCount @@ 

       # the actual diff contents 
       sed -e 's/^/+/' "$workspacePath" 
       echo 
     done 
} 

doIt 
0

只是P4打印添加的文件(我知道,這不是很大), - 但它絕對一條路可走。