【问题标题】:Can you map a file or directory multiple times in perforce?您可以在 perforce 中多次映射文件或目录吗?
【发布时间】:2011-09-23 15:59:04
【问题描述】:

我想知道是否可以使用 perforce 将文件或目录映射到多个本地副本。

我知道 P4V 确实允许我这样做,但我遇到了来自客户端的非常奇怪的行为,我怀疑这不起作用。

我不打算修改任何这些文件,我需要它来重新创建构建我自己的源代码树所需的相同目录结构(如果我知道我只需要修改,我不想创建一个巨大的分支文件很少,而且我不想创建额外的工作区,因为从它们切换需要太多时间)。

【问题讨论】:

  • 您能否从您的客户规范中添加一段摘录并描述您看到的“奇怪行为”?

标签: perforce perforce-client-spec


【解决方案1】:

你不能这样做,因为它会导致坏事。您只能将 depot 文件映射到一个本地位置,反之亦然。您可以将两个不同的 depot 文件夹映射到同一个本地文件夹,但您必须这样做,本地文件夹中的文件将只转到一个 depot 位置(好吧,它会忽略冲突的早期映射)。

分支不能“大”,因为 Perforce 会在您实际进行修改之前制作卷影副本。一般来说,你应该分支整棵树。然后,您可以为每个分支拥有一个工作区(首选),或者一个映射所有内容的工作区(仍然可行)。

【讨论】:

  • Perforce 团队可能没有认真考虑拥有 >500.000 个文件和 >30GB 的大型存储库。
  • 他们已经考虑过了。你会遇到很多问题。如果一个 depot 文件位于两个不同的本地位置,并且您同步其中一个,那么 Perforce 现在认为它们都已同步。如果您添加一个文件,并且客户端映射显示两个可能的仓库位置,Perforce 应该将文件放在哪里?
  • Perforce 的人似乎不太习惯符号链接和硬链接的概念;)
【解决方案2】:

(抱歉 - 刚刚看到您不想切换工作区...您能解释一下为什么您认为这需要太多时间吗?您可以在 p4v 中,在连接菜单下设置“最喜欢的连接”快速切换。我想热键可能会使其更快。您还可以选择打开多个 p4v 实例)。

您可以简单地创建一个新工作区来为您进行映射吗?如果您不打算修改文件,这似乎是最简单的方法。只需创建一个新工作区,然后在工作区映射中应用您需要的任何更改。一个例子:

//depot/src/... //my-test-workspace/src_from_depot/...
//depot/doc/... //my-test-workspace/doc_from_depot/...

这会将 src 和 doc 文件夹放在我们工作区根目录中的 src_from_depotdoc_from_depot 文件夹中。我只是将工作空间根目录放在与您通常工作不同的地方 - 然后您将拥有与您通常使用的目录结构隔离的副本,该目录结构已更改以满足您的需求。

【讨论】:

    【解决方案3】:

    听起来真正的问题可能是切换工作区所需的时间。如果速度很快,那么您可以为每个分支维护单独的工作区。

    在下一个版本中,就地分支切换会更容易。换句话说,您可以维护一个工作区,并在工作时将其从一个分支切换到另一个分支。 p4 sync 命令添加了一个新选项,仅更新工作空间中实际不同的文件。因此,即使您的分支很大(> 500k 文件,> 30GB 数据),如果两个分支之间只有 10 个文件不同,则将工作区从一个分支移动到另一个分支只会更新这 10 个文件。这应该可以节省大量时间。

    我不确定这是否会有所帮助,但我认为值得一提。

    【讨论】:

      【解决方案4】:

      我也遇到过这个问题。我有多个分支共有的文件/目录。公共文件/目录需要以特定结构存在于每个分支中以进行编译。

      对我有用的解决方案是将公共文件/目录放置在与分支分开的位置。这保持了 perforce 1:1 映射要求。

      然后,将公共文件/目录符号链接到每个分支以进行编译。

      【讨论】:

        【解决方案5】:

        Preforce 现在支持它。

        将单个仓库路径映射到工作区中的多个位置。

        https://www.perforce.com/perforce/doc.current/manuals/p4guide/Content/P4Guide/configuration.workspace_view.one-to-many.html?TocPath=Configure%20clients%7CConfigure%20workspace%20views%7C_____8

        要启用一对多映射功能,请将 & 添加到您要映射到的每个其他客户端位置的映射行前:

        查看:

        //Acme/images/logo.png  //bruno_ws/products/images/logo.png
        &//Acme/images/logo.png  //bruno_ws/documentation/images/logo.png
        &//Acme/images/logo.png  //bruno_ws/support/images/logo.png
        

        当您同步客户端时,depot 文件会映射到所有三个位置。

        重要 所有以 & 开头的映射行都是只读的,因此在上面的示例中 //bruno_ws/documentation 和 //bruno_ws/support 是只读的。

        【讨论】:

        • 如果 perforce 还在营业?没有人告诉他们关灯?
        • 这是边界线link-only answer。您应该在此处扩展您的答案以包含尽可能多的信息,并仅将链接用作参考。
        猜你喜欢
        • 1970-01-01
        • 2016-04-26
        • 2018-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多