2

我是 Perforce 的新手(但对其他系统很有经验,主要是 SVN)。
现在我正在尝试制作一个简单的 Windows bat 构建脚本,该脚本需要检查一些构建结果(我知道,这对某些人来说是有争议的,但请尝试忽略,因为这是一个不同的讨论)。我为此使用p4。问题是我似乎要么:

  • 使用与其他机器相同的“客户端”(-c 选项)。这将有一个“根”,看起来它指定了工作副本在本地的绝对路径。似乎相当“wtf?” 大部头书...
  • 以交互方式为每台机器创建一个“客户端”(匹配本地文件系统布局)。交互性显然是自动化脚本的一大障碍。

我可以像使用 SVN 一样使用当前目录吗?
有更好的选择吗?

4

4 回答 4

3

我建议每次使用客户端模板创建一个新客户端。首先,在实际的构建客户端中手动创建一个具有您想要的视图的客户端。不要指定 Owner、Client 或 Root 字段。然后,每次您想要一个新客户时,请执行以下操作:

p4 client -t my-client-template-name -o my-unique-client-name >clientspec.txt
p4 client -i <clientspec.txt

my-client-template-name您在第一步中创建的客户端在哪里。当然,完成后请务必执行以下操作:

p4 client -d my-unique-client-name
于 2010-10-21T18:16:46.200 回答
2

创建一个根为null的工作区,并将 depot 映射到该客户端。这是一个示例客户端规范:

客户:client_name

更新:2010/10/20 14:18:23

访问时间:2010/10/20 14:20:53

拥有者:乌鸦

主机:乌鸦-pc

描述:
    由乌鸦创建。

根:空

选项: noallwrite noclobber nocompress unlocked modtime rmdir

提交选项:保持不变

LineEnd:本地

看法:
    //仓库/... //client_name/...

您的脚本应该做的第一件事是通过设置 $P4CLIENT$ 环境变量来切换到此客户端:

p4 set p4client=client_name

您的脚本现在将在该客户端的上下文中工作。 由于您指定了 null 的根,因此您所做的任何同步都将与当前目录相关。因此,如果您在 C:\bar 中同步 //depot/foo/...,您的文件将出现在 C:\bar\foo 中。

您的脚本应该做的最后一件事是清除 P4CLIENT 变量以将系统恢复为默认客户端规范:

p4 set p4client=

于 2010-10-20T18:44:02.840 回答
1

您可以使用以下方式交互式地创建没有编辑器的客户端p4 client -i

-i 标志导致从标准输入读取客户端规范。未调用用户的编辑器

因此,在您的构建脚本中,您将有一个用于客户端视图的模板,您可以为当前构建机器动态修改该模板并将其传递给p4 client -i.

于 2010-10-20T09:07:23.170 回答
0

显然,您可以预先创建一个根目录为“null”的客户端工作区,这将导致 perforce 使用当前工作目录作为根目录。

于 2010-10-20T13:57:32.527 回答