【问题标题】:Create Client Workspace using Perforce command-line on Ubuntu在 Ubuntu 上使用 Perforce 命令行创建客户端工作区
【发布时间】:2011-06-15 09:31:06
【问题描述】:

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

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

我使用的命令是:

p4 -u <MyUsername> -P <MyPassword> client MyWorkspace

这会运行并加载 vim,然后我需要执行 :wq [Enter] 退出。

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

【问题讨论】:

  • 只是想指出,此框是通过 SSH 从我们网络上的远程位置使用的。
  • 我赞成这个想法,但您是否考虑过使用持续集成应用程序? Hudson 和/或 Jenkins 是我们使用的一种,它与 Perforce 配合得很好。

标签: ubuntu perforce


【解决方案1】:

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

所以在 unix 机器上:

$ cat client.txt | p4 client -i

或者对于windows:

type client.txt | p4 client -i

在 perforce 中从 txt 文件创建客户端。您可以通过 p4 client -o &lt;client_name&gt; &gt;client.txt 创建文本并从那里进行更改。

【讨论】:

    【解决方案2】:

    您可能想试试p4 client -i。从帮助页面:

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

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

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

    【讨论】:

      【解决方案3】:

      我使用 heredocs 来尽量减少对临时文件的需求

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

      您只需要指定Client:Root:Stream: 字段(或View:,如果您使用的是较旧的//depot 样式)

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 一位同事要求我这样做,他的要求是在每次构建时创建然后删除客户端。这可能不是最好的方法(讨论是另一次),但这是我被要求做的。我会提到你的建议,看看他怎么说。我从 TFS 迁移到 p4 相对较新。
        • 不确定您的情况,但我们使用 TeamCity,任何给定的构建都可以并行启动,并在任意数量的构建代理机器上构建,包括同一台机器。根构建目录是团队城市生成的长哈希值。我认为 P4 需要一个恒定值作为客户端规范的 Root 值。在我这种情况下,我认为您必须找出您的哈希值,创建一个客户端使用它并对其进行爆破,这样您就不会在 P4 中积累数千个无用的客户端设置。这个哈希值可能会被再次使用或不再使用,因此唯一干净的方法是创建、使用和删除它。
        • 每次构建时创建和删除工作区的缺点是每次构建期间都需要从 P4 删除和重新下载完整的源代码。如果使用现有工作区,则只需下载源增量(更改)。对于大型代码项目,这可能会严重影响 P4 服务器、构建服务器和网络带宽的性能。
        【解决方案5】:

        我完全同意Byran's answer。您是否需要为每次构建时创建一个唯一的客户端。多个项目使用同一个工作区没有问题;如果您想在同一台机器上并行运行构建,您只需要创建多个工作区。创建一个新的工作区并在每次构建时执行完全同步将显着增加您的构建时间。

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

        Root
         /Bin
         /Intermediate
         /Source
        

        这样你只需要删除这两个目录并执行p4 sync //filespec/ 即可进行干净的构建。

        【讨论】:

          【解决方案6】:

          我不完全确定我理解您要做什么,但如果您想继续使用同一个客户端,请设置您的变量 P4CLIENT=MyWorkspace 或使用

          p4 -u &lt;MyUsername&gt; -P &lt;MyPassword&gt; -c MyWorkspace.

          【讨论】:

          • 我没有提到要求是创建客户端/工作区并获取构建所需的所有内容,然后删除客户端/工作区,因此每次都是 100% 干净。
          【解决方案7】:

          如果您想将整个过程保留在 perforce 中,请创建一个名为 client_template 的模板工作区/客户端并将其通过管道输入

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

          【讨论】:

            【解决方案8】:

            只需在“p4 login”之后运行命令“p4 client”。运行命令后,它将询问所有详细信息。您只需根据您的要求填写这些详细信息。

            主要是,你只需要关注临时文件中的两个参数。保存文件后,将立即创建客户端。

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

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

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

            【讨论】:

              【解决方案9】:

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

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

              然后

              p4 client
              

              如果它是新的,将创建工作区,或者提及类似的内容:

              Client MyWorkspace not changed.
              

              【讨论】:

              • 将 P4EDITOR 设置为 true 只是自找麻烦。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-04-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多