Perforce -- 生成包括新增文件的差异(diff)文件?

15

当我使用 "p4 diff" 命令时,它会忽略我已经添加的文件。是否有可能生成包括添加的文件和更改的文件在内的差异对比呢?


“p4 reconcile” 对你有用吗?http://www.perforce.com/perforce/doc.current/manuals/cmdref/p4_reconcile.html - P4Shimada
6个回答

13
考虑到在Perforce中比较客户端工作区文件与存储库中的版本,diff in Perforce的答案是“否”。
对于added file(提交之前未提交到存储库),没有记录的历史可供比较。
更详细的答案涉及使用脚本完成添加文件的完整内容差异比较。 (类似于此SO question中的操作)

3

这是P4 diff已知缺失的功能,许多与Perforce相关的工具需要解决这个问题。

代码审查工具Reviewboard带有post-review工具。它用于为代码审查创建差异,但如果您只想进行差异比较,则会执行此操作。

它是使用Python编写的,您可以提取差异部分以供自己使用。


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

我刚刚让这个工作起来了,分支出自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 @@

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


0

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

我的做法是复制编辑文件的差异块描述符头。这包括一行列出depot和本地路径 - 相当简单 - 和另一行范围信息,格式如这里描述的

因此,我将每个附加文件的内容添加到差异中,每个内容都在其前面加上

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

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

这对我来说有效;您的情况可能有所不同。


0

只需使用p4 print命令打印添加的文件(我知道,这不是最好的方法)- 但这绝对是一种可行的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接