在Perforce中,如何在挂起的变更列表中找到文件的本地路径?

在Perforce中,如何在挂起的变更列表中找到文件的本地路径?,perforce,Perforce,给定Perforce变更列表编号,我想找到挂起的变更列表中所有文件的本地路径 p4描述变更列表——获取变更列表中文件的仓库路径(方法1) p4 opened-c changelist——获取变更列表中文件的仓库路径(方法2) p4 have--获取以前提交的所有文件的仓库路径和本地路径 通过组合使用p4 descripe和p4 have,我可以找到变更列表中以前提交给Performance的所有文件的本地路径(并打开以删除或编辑) 但是为添加而打开的文件呢p4 have不知道为添加而打开的文

给定Perforce变更列表编号,我想找到挂起的变更列表中所有文件的本地路径

  • p4描述变更列表——获取变更列表中文件的仓库路径(方法1)
  • p4 opened-c changelist——获取变更列表中文件的仓库路径(方法2)
  • p4 have--获取以前提交的所有文件的仓库路径和本地路径
通过组合使用p4 descripep4 have,我可以找到变更列表中以前提交给Performance的所有文件的本地路径(并打开以删除编辑

但是为添加而打开的文件呢p4 have不知道为添加而打开的文件的任何信息


给定一个挂起的Perforce变更列表,如何找到要添加到Perforce的文件的本地路径?

要输出变更列表中所有挂起的添加的本地路径,可以使用:

p4 opened -c changelist | grep -w add | sed 's/#.*//' \
| p4 -x - where | awk '/^\// {print $3}'
这在没有grep的情况下也是一样的,但有点模糊:

p4 opened -c changelist | sed -n 's/\(.*\)#.*- add .*/\1/p' \
| p4 -x - where | awk '/^\// {print $3}'

根据Peter G的答案,翻译成powershell 2.0:

p4 opened -c changelist 
    | Where-Object{$_ -match "add"}
    | ForEach-Object{p4 where ($_.split('#')[0])}
    | ForEach-Object{$_.split()[2]}

当然,你也可以使用

p4 -ztag opened -c changelist
这将报告每个打开文件的depotFile和clientFile。 要仅列出客户端文件,请执行以下操作:

p4 -ztag opened -c changelist | grep clientFile | awk '{print $3}'
将//client/替换为客户机的根目录,留给读者作为练习。

p4 opened-s-c | awk-F”“{print$1}'| p4-x-其中| awk-F”“{print$3}”
p4 opened -s -c <changelist#> | awk -F " " '{print $1}' | p4 -x - where | awk -F " " '{print $3}'

挂起变更列表中所有文件的本地路径,无任何外部或平台特定工具:

p4 -F %clientFile% fstat -Ro -F action=add [-e CHANGE] //...

如果要为所有操作打开文件,请删除'-F action=add'。

谢谢您的解决方案。“p4 where”有一点需要注意——如果一个文件在客户端规范中被多次映射,那么“p4 where”将错误地返回第一个映射,而不是文件真正结束的最后一个映射。这听起来像是一个错误,
p4 where
应该跟随客户端视图。如果您有支持,请向perforce提交一个bug。问题与
{print$3}
有关吗?@tenpn,再次提请注意。最后我自己尝试了多个映射
p4,其中
在这种情况下输出多行,并且只有以“/”开头的行是正确的。我更正了这个案例的答案。请记住,awk具有grep功能,因此您可以将其缩短为:
p4-ztag opened-c changelist | awk'/clientFile/{print$3}'
在所有发布的答案中,这是唯一一个真正适合我的。谢谢