给定一个Perforce更改列表号,我想找到该待挂更改列表中所有文件的本地路径。
- p4描述变更列表——获取变更列表中文件的仓库路径(方法1)
- p4打开-c changelist——获取变更列表中文件的仓库路径(方法2)
- p4 have——让我获得以前提交的所有文件的仓库路径和本地路径
使用p4描述和p4 have的组合,我可以找到以前提交给Perforce的更改列表中所有文件的本地路径(并为delete或edit打开)。
但是对于add打开的文件呢?p4 have不知道对于add打开的文件。
给定一个挂起的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}'
当然你也可以使用
p4 -ztag opened -c changelist
这将报告每个打开文件的depotFile和clientFile。只列出客户端文件:
p4 -ztag opened -c changelist | grep clientFile | awk '{print $3}'
将//client/替换为客户端的根目录留给读者作为练习。
在没有任何外部或特定于平台工具的情况下,挂起变更列表中所有文件的本地路径:
p4 -F %clientFile% fstat -Ro -F action=add [-e CHANGE] //...
删除'-F action=add'如果你想打开所有操作的文件
p4 opened -s -c <changelist#> | awk -F " " '{print $1}' | p4 -x - where | awk -F " " '{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]}