当我使用“p4 diff”时,它会忽略我已打开添加的文件。是否可以生成包含添加文件和更改文件的差异?
答案 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打印添加的文件(我知道,这不是很好) - 但它绝对是一种方法。