Perforce - 生成包含添加文件的差异?

时间:2009-12-29 10:19:27

标签: diff perforce

当我使用“p4 diff”时,它会忽略我已打开添加的文件。是否可以生成包含添加文件和更改文件的差异?

6 个答案:

答案 0 :(得分:13)

考虑到diff in Perforce将客户端工作区中的文件与软件仓库中的修订进行比较,简短的回答是“否”。
没有记录的历史记录可以与added file进行比较(在提交之前未提交到仓库)

更长的答案将涉及一个脚本来完成带有添加文件的完整内容的差异。 (有点像SO question

答案 1 :(得分:3)

这是p4 diff的一个众所周知的缺失功能,很多处理Perforce的工具都必须解决。

代码审核工具Reviewboard附带工具post-review。它用于为代码视图创建差异,但如果需要,它只会执行差异。

在python中,你可以拉出diff部分供自己使用。

答案 2 :(得分: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

答案 3 :(得分:0)

我刚刚解决了这个问题,并将我添加的文件包含在Fisheye预提交审核中。

我所做的是复制编辑过的文件&#39; diff hunk描述符头。这包括一行列出库和本地路径 - 非常简单 - 另一行包含范围信息,格式如here所述。

因此,我将每个文件的内容添加到diff中,每个文件的前面都加上

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

其中LEN是添加文件中的行数。

这对我有用;你的里程可能会变化。

答案 4 :(得分:0)

我刚刚开始工作,从Aaron的回答中解脱出来。而不是

==== //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 @@

然后确保在每个添加的行的开头都有一个+

答案 5 :(得分:0)

只需p4打印添加的文件(我知道,这不是很好) - 但它绝对是一种方法。