8

I would like to know if I can map a file or directory to multiple local copies with perforce.

I know that the P4V does allow me to do that but I encountered very weird behavior from the client and I suspect that this doesn't work.

I do not plan to modify any these files, I need this in order to recreate the same directory structure needed to build my own source tree (I do not want to create a huge branch if I know that I have to modify only few files and also I do not want to create additional workspaces because switching from them takes too much time).

4

5 回答 5

5

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

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

于 2011-06-28T05:24:23.293 回答
4

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

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

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

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

于 2011-06-27T18:31:42.623 回答
2

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

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

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

于 2011-06-28T13:11:31.377 回答
1

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

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

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

于 2012-11-05T18:18:00.413 回答
1

Preforce supports it now.

Map a single depot path to multiple locations in a workspace.

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

To enable the one-to-many mapping feature, prepend & to the mapping line for each additional client location you want to map to:

View:

//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

When you sync the client, the depot file maps to all three locations.

Important All mapping lines prepended with & are read-only, so in the example above //bruno_ws/documentation and //bruno_ws/support are read only.

于 2018-11-09T14:44:38.730 回答