如何在 p4v 的流映射中排除目录

How to exclude a directory in Stream mapping in p4v

我正在使用 perforce 的可视化客户端,我想从工作区中排除一个目录。在使用流之前,我只是导航到我的工作区,在树中找到文件夹,然后将其排除(我已经在我发现的许多其他相关问题中找到了这个解决方案)。但是,现在我正在使用流,它不会让我这样做,显然我必须编辑流映射。

所以我尝试在编辑流时将这一行添加到重新映射的框中:

-//NumberPlus/current/Library/... //nplus-mainline/current/Library/

但是我得到一个错误:

Error in stream specification.
Error detected at line 24
Null directory (//) not allowed in '-//NumberPlus/current/Library/...'.

编辑:我在 Windows 8.1,澄清一下。

如果客户端工作区切换到特定流,您不能只编辑其映射。流的全部意义在于您的工作区映射是直接从流定义生成的。所以这是一个功能。

还不完全清楚

  • 您根本不需要流中的目录,或者
  • 在流中包含该目录是有效的,但您不想将其同步到您的工作站,或者
  • 您希望目录同步到您的工作站,但您希望目录具有不同的内容(例如,来自具有不同版本库的其他流。

但是,对于所有这些情况,我怀疑前进的最佳途径是为当前流定义一个新的 child 流。

您需要使用 "share"、"exclude"、"isolate" 和 "import" 映射类型定义路径映射。

例如,如果您根本不需要 Library/... 目录,您可以 "exclude" 从 parent 中获取它。

那么该流将根本没有该目录,并且当您同步到该流时,它(当然)也不会出现在您的工作站上。

如果您想在 Library/... 目录中拥有不同的代码副本,以便它成为与 parent 的故意分歧点,您可以 "isolate"它来自您的 parent 以提交您自己的自定义版本,或 "import" 来自另一个流以使用该流的 Library/... 目录。

在任何一种情况下,该目录都将成为流的一部分,并将同步到您的工作站,但该目录的内容将不同于 parent 流中使用的内容(它们不同的确切方式在您的控制之下,因为您相应地定义了流)。

文档和一些例子在这里:http://www.perforce.com/perforce/doc.current/manuals/p4v/streams_views.html 和这里: http://www.perforce.com/sites/default/files/pdf/Streams-ebook.pdf

我相信我已经解决了这个问题。明确地说,我希望版本控制完全忽略该文件夹。我在 Unity 中使用 p4connect,它一直想在我的软件仓库中包含不必要的东西。

我所要做的就是将这一行添加到路径框中的父流中:

排除 current/Library/...

如果您要排除的文件夹特定于您的计算机,则在本地设置 P4IGNORE 是将其排除在添加到软件仓库中的最简单方法。

http://www.perforce.com/blog/120214/new-20121-p4ignore

您将 P4IGNORE 设置为某个名称,例如 "p4ignore.txt",创建一个具有该名称的文件,并向其中添加 "Libraries"——随后的 "p4 add" 命令将跳过找到的路径在 P4IGNORE 文件中,因此这些文件永远不会添加到软件仓库中。

如果这是该流的所有工作区共有的东西(例如,这是一个构建工件,每个人都将生成并且没有人应该签入),您想要做的是添加一个 "exclude" 到流的路径(这将从该流生成的分支视图和客户端视图中排除它)。例如:

Paths:
    share ...
    exclude Libraries/...

"exclude Libraries/..." 与您添加到客户端视图的排除行基本相同,只是您将其指定为相对路径,您不需要指定映射的两边, "exclude" 类型隐含了“-”。 "remap" 类型是如果你想保留这些文件但在不同的仓库位置,这在这里听起来不适用。

有关定义流视图的更多信息: http://www.perforce.com/perforce/doc.current/manuals/p4v/streams_views.html