在Ubuntu上使用Perforce命令行创建客户端工作区

在Ubuntu上使用Perforce命令行创建客户端工作区,ubuntu,perforce,Ubuntu,Perforce,我正在写一个脚本,在Ubuntu构建机器上构建我们所有的项目 每个项目都存储在Perforce中,我使用p4执行上述操作 我使用的命令是: p4 -u <MyUsername> -P <MyPassword> client MyWorkspace p4-u-P客户端MyWorkspace 这将运行并加载vim,然后我需要执行:wq[Enter]退出 我可以自动保存或避免vim加载吗?您可能想尝试p4 client-I。从“帮助”页面: -i标志从标准输入读取客户机规范

我正在写一个脚本,在Ubuntu构建机器上构建我们所有的项目

每个项目都存储在Perforce中,我使用p4执行上述操作

我使用的命令是:

p4 -u <MyUsername> -P <MyPassword> client MyWorkspace
p4-u-P客户端MyWorkspace
这将运行并加载vim,然后我需要执行:wq[Enter]退出


我可以自动保存或避免vim加载吗?

您可能想尝试
p4 client-I
。从“帮助”页面:

-i标志从标准输入读取客户机规范。不会调用用户的编辑器

因此,您可以在脚本中构造客户端规范,并将其传递给
p4 client-i
。此外,
-t
也可能有帮助:

-t标志通过使用指定的客户端视图和选项作为模板来构造客户端视图,而不是使用现有视图或创建新的默认视图


对于我的构建,我有一个文本文件,在perforce中包含我的客户机。这样我就知道客户在构建时的样子(我不使用规范仓库)

因此,在unix机器上:

$cat client.txt|p4 client-i

或适用于windows:

键入client.txt | p4 client-i


从perforce中的txt文件创建客户端。您可以通过执行
p4 client-o>client.txt来创建文本,并从中进行更改。

您不需要为每个构建创建新的客户端。您可以重复使用同一个客户端,只需运行“p4 sync”以使用要生成的代码的当前版本更新文件系统。

我不完全确定我是否理解您试图执行的操作,但是如果您想继续使用同一个客户端,请设置变量
P4CLIENT=MyWorkspace
或使用

p4-u-p-c我的工作空间

我完全同意。您需要为每次要进行构建时创建一个唯一的客户端。有多个项目使用同一个工作空间没有问题;如果要在同一台计算机上并行运行生成,只需创建多个工作区。创建一个新的工作区并对每个构建执行完全同步将显著增加构建时间

如果需要确保有一个干净的工作区,请将中间路径和输出路径配置为指向文件夹层次结构中较高位置的公共位置

Root
 /Bin
 /Intermediate
 /Source

这样,您只需删除这两个目录并执行
p4 sync//filespec/
即可完成干净的构建。

另一种方法,假设您位于客户端工作区的工作目录中:

echo "P4CLIENT=MyWorkspace" > .perforce
export P4EDITOR=true`
然后

p4 client
将创建工作区(如果是新的工作区),或提及以下内容:

Client MyWorkspace not changed.

我使用herdocs来最小化对临时文件的需求

export P4CLIENT=tmp_$$
p4 client -i <<HERE
Client: ${P4CLIENT}
Root: /tmp/${P4CLIENT}
Stream: //OurStreamDepot/${branch}
HERE
export P4CLIENT=tmp_$$

p4 client-i如果您希望将整个过程保持在perforce中,请创建一个名为
client\u template
的模板工作区/客户机,并将其导入

p4 client -o -t client_template new_client|p4 client -i

只需在“p4登录”之后运行命令“p4客户端”。它将在运行命令后询问所有详细信息。您只需按照您的要求填写这些详细信息

主要来说,您只需要关注temp文件中的两个参数。保存文件后,将立即创建客户端

根目录:这是本地存储库路径。例如,
Root:/User/codebase/code

查看:要从客户端映射到远程仓库的流。例如,
查看: //exp/main///expbuild_centos/

[root@no1011142063123 ~]# p4 client "expbuild_centos"
Client expbuild_centos saved.
[root@no1011142036123 ~]#  

我只是想指出,这个盒子是通过SSH从我们网络上的一个远程位置使用的。我赞同这个想法,但是您是否考虑过使用持续集成应用程序?我们使用的是Hudson和/或Jenkins,它与Perforce配合得相当好。我没有提到要求创建客户机/工作区,获取构建的所有内容,然后删除客户机/工作区,以便每次都100%干净。一位同事要求我这样做,他的要求是在每个构建中创建然后删除客户端。这可能不是最好的方法(下次再讨论),但这是我被要求做的。我会提到你的建议,看看他怎么说。我是从TFS搬到p4的新手。不确定您的情况,但我们使用TeamCity,任何给定的构建都可以并行启动,并构建在包括同一台机器在内的任意数量的构建代理机器上。根生成目录是team city生成的长哈希值。我认为P4需要一个常量值作为客户端规范的根值。在我这种情况下,我认为你必须找出你的散列值创建一个客户端,使用它并将其爆破,这样你就不会在P4中积累数千个无用的客户端设置。此哈希可能会再次使用,也可能永远不会再次使用,因此唯一干净的方法是创建、使用和删除它。在每次生成时创建和删除工作区的缺点是,在每次生成期间,需要删除并重新下载P4中的完整源代码。如果使用现有工作区,则只需下载源增量(更改)。对于大型代码项目,这可能会对P4服务器、构建服务器和网络带宽造成重大性能影响。将P4EDITOR设置为true只会带来麻烦。