6

给定一个路径(在我的计算机上),我如何测试该文件是否受版本控制(即 Perforce 库中存在一个副本)?我想在命令行中对此进行测试。

4

3 回答 3

6

检查p4 help files。简而言之,您运行p4 files <your path here>它会为您提供该文件的仓库路径。如果它不在仓库中,你会得到“没有这样的文件”。

于 2013-10-29T18:19:16.267 回答
3

对于脚本,p4 files FILE是不够的,因为当没有这样的文件时它不会更改其退出代码。

相反,您可以通过 grep 传递它,它会查找 perforce 路径的前导斜杠对:

# silently true when the file exists or false when it does not.
p4_exists() { 
  p4 files -e "$1" 2>/dev/null |grep -q ^//
}

如果你想要可见的输出,你可以去掉2>/dev/null和 grep 。-q

p4 文件版本 2012.1之前(比如p4 文件版本 2011.1),它不支持-e. 您必须|grep -v ' - delete [^-]*$'在上面的 grep 之前添加。

⚠"> <strong>警告</strong>:未来的 <code>p4</code> 版本可能会更改格式并破坏此逻辑。</p> </blockquote>     </div>
    <div class=

于 2018-12-21T00:03:09.983 回答
0

与 Adam Katz 的解决方案类似,除了未来版本更可能支持之外p4,您可以将“预先添加描述性字段”的全局选项传递给每一行。-s这是“文本”、“信息”、“错误”或“退出”之一,后跟一个冒号(似乎还有一个空格)。这是为了便于编写脚本。

对于传递给p4 -s files命令的所有文件,每个文件都应该返回一行。如果文件存在于仓库中,则行以 开头,info:而如果文件不存在于仓库中,则行以 开头error:。例如:

info: //depot/<depot-path-to-file>
error: <local-path-to-file>

因此,基本上,状态行相当于退出代码,但基于每个文件。单独的退出代码无法巧妙地处理传入的任意数量的文件。

请注意,如果有不同的错误(例如连接错误),则仍会输出错误行。因此,如果您真的希望处理更加稳健,您可能希望将其与 Adam Katz 建议的内容结合起来,或者可能需要 grep 来获取输出行中文件的基本名称。

于 2019-09-10T16:56:29.283 回答