问题描述
|
我正在编写一个脚本,以在Ubuntu构建机器上构建所有项目。
每个项目都存储在Perforce中,我正在使用p4执行上述操作。
我正在使用的命令是:
p4 -u <MyUsername> -P <MyPassword> client MyWorkspace
这会运行并加载vim,然后我需要执行:wq [Enter]退出。
我可以自动保存或避免加载vim吗?
解决方法
对于我的构建,我有一个包含perforce的文本文件,其中包含我的客户端。这样,我就知道客户端在该构建中的样子(我不使用规范仓库)。
如此简单:
type client.txt | p4 client -i
或在Ubuntu上:
more client.txt | p4 client -i
从perforce中的txt文件创建客户端。您可以通过执行p4 client -o <client_name>
创建文本并从此处进行更改。
, 您可能想尝试p4 client -i
。从帮助页面:
-i标志从标准输入中读取客户机规范。不会调用用户的编辑器。
因此,您可以在脚本中构建客户端规范,然后将其传递给p4 client -i
。此外,-t
也可能有帮助:
-t标志通过使用指定的客户端视图和选项作为模板来构造客户端视图,而不是使用现有视图或创建新的默认视图。
, 我使用heredocs将临时文件的需求减至最少
export P4CLIENT=tmp_$$
p4 client -i <<HERE
Client: ${P4CLIENT}
Root: /tmp/${P4CLIENT}
Stream: //OurStreamDepot/${branch}
HERE
您只需要指定Client:
,Root:
和Stream:
字段(如果使用旧的// depot样式,则指定View:
)
, 您无需为每个版本创建一个新的客户端。您可以重新使用相同的客户端,只需运行“ p4 sync”以使用要构建的当前代码版本来更新文件系统。
, 我不确定我理解您要做什么,但是如果您想继续使用同一客户端,请设置变量P4CLIENT=MyWorkspace
或使用
p4 -u <MyUsername> -P <MyPassword> -c MyWorkspace
。
, 我完全同意Byran的回答。您是否需要为每次构建都创建一个唯一的客户端。使用同一个工作空间有多个项目没有问题;如果要在同一台计算机上并行运行构建,则只需要创建多个工作区即可。创建一个新的工作区并执行每个构建的完全同步将大大增加您的构建时间。
如果需要确保工作区干净,请将中间路径和输出路径配置为指向文件夹层次结构中较高的公共位置。
Root
/Bin
/Intermediate
/Source
这样,您只需要删除这两个目录并执行p4 sync //filespec/
即可进行干净构建。
, 如果您希望将整个过程保留在perforce中,请创建一个名为client_template
的模板工作区/客户端并将其通过管道传递给
p4 client -o -t client_template new_client|p4 client -i
, 假设您位于客户端工作空间的工作目录中,则采用另一种方法:
echo \"P4CLIENT=MyWorkspace\" > .perforce
export P4EDITOR=true`
接着
p4 client
会创建一个新的工作区,或者提到类似以下内容的工作区:
Client MyWorkspace not changed.