【问题标题】:In Perforce, how do I find the local path for files in a pending changelist?在 Perforce 中,如何在待处理的更改列表中找到文件的本地路径?
【发布时间】:2011-04-21 21:07:53
【问题描述】:

给定一个 Perforce 更改列表编号,我想找到该待处理更改列表中所有文件的本地路径。

  • p4 describe changelist -- 获取 changelist 中文件的 depot 路径(方法 1)
  • p4 opens -c changelist -- 获取更改列表中文件的仓库路径(方法 2)
  • p4 have -- 获取之前提交的所有文件的仓库路径和本地路径

使用 p4 describep4 have 的组合,我可以找到更改列表中之前已提交给 Perforce(并已打开)的所有文件的本地路径删除编辑)。

但是为 add 打开的文件呢? p4 有 对为 add 打开的文件一无所知。

给定一个待处理的 Perforce 更改列表,我如何找到即将添加到 Perforce 的文件的本地路径?

【问题讨论】:

    标签: perforce


    【解决方案1】:

    要输出更改列表的所有待添加的本地路径,您可以使用:

    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 where”有一点需要注意——如果一个文件在客户端规范中被多次映射,那么“p4 where”将错误地返回第一个映射,而不是文件真正结束的最后一个映射。
    • 这听起来像是一个错误,p4 where 应该遵循客户端视图。如果您有支持,请使用 perforce 提交错误。
    • 问题与{print $3}有关吗?
    • @tenpn,感谢您再次关注此问题。我终于自己尝试了多个映射。 p4 where 在这种情况下输出多行,只有以 '//' 开头的那一行是正确的。我更正了我对这个案例的回答。
    【解决方案2】:

    你当然也可以使用

    p4 -ztag opened -c changelist
    

    这将报告每个打开的文件的 depotFile 和 clientFile。 仅列出客户端文件:

    p4 -ztag opened -c changelist | grep clientFile | awk '{print $3}'
    

    将 //client/ 替换为客户端的根目录留作读者练习。

    【讨论】:

    • 请记住 awk 具有 grep 功能,因此您可以将其缩短为:p4 -ztag opened -c changelist | awk '/clientFile/ {print $3}'
    【解决方案3】:

    未决更改列表中所有文件的本地路径,无需任何外部或特定于平台的工具:

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

    如果您想为所有操作打开文件,请删除“-F action=add”。

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:
        p4 opened -s -c <changelist#> | awk -F " " '{print $1}' | p4 -x - where | awk -F " " '{print $3}'
        

        【讨论】:

        • 在所有发布的答案中,这是唯一对我有用的答案。谢谢。
        猜你喜欢
        • 2010-11-10
        • 2014-03-28
        • 2020-08-19
        • 1970-01-01
        • 2010-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多