使用Perforce,在许多项目中共享具有权限的文件

时间:2013-10-10 22:32:37

标签: perforce perforce-stream

我使用Perforce来管理多个Web应用程序。所有应用程序共享公共前端文件(css,JS和java速度代码)。我想创建一个vanilla应用程序,并与其他应用程序共享文件。开发人员将无法在子应用程序中编辑这些文件(类似于p4流导入),但当他们同步到应用程序时,它将下拉应用程序文件和(副本)共享文件。编辑这些文件只会在vanilla应用程序中进行。

我一直试图通过流来获得解决方案。问题(与标准工作空间映射一样)是我无法将文件映射到许多地方。

我已将我的香草应用程序构建为主流(本身是来自各个位置的工具集合)。然后,我使用共享和导入的组合为每个应用程序创建了开发分支。必须创建工作空间以匹配每个流。

这使得每个应用程序都有四个环境(dev,qa,stage,live)。我没有看到关于这个问题的明确路径。

什么对我们不起作用:

  • HTTP分发。我们最初通过网络电话共享我们的js资源,但这在网站停机时会产生问题。我们希望将JS文件(通过p4)分发为LOCAL文件。
  • 编译JAR。这些共享文件会经常更改,并且没有编译代码。这是一个解决方案,但不是一个人想要的。

我们是溪流新手,习惯于整个仓库的一个工作空间。也许我只需要放弃它?

1 个答案:

答案 0 :(得分:0)

你应该能够在没有太多困难的情况下使用溪流。假设我理解你在做什么,我们使用流解决了类似的问题。

我们有一系列由内部组维护的库,这些库预计将用于各种应用程序。这些都保存在自己的流中:

//LibraryA/main/...
//LibraryB/main/...

对于主要版本,它们被锁定为发行版:

//LibraryA/r1_0/...
//LibraryB/r2_0/...
//LibraryB/r2_0/...

这样我们就可以保持API的一致性,而无需在其他流中使用@ specification。这对您来说可能是一个不必要的步骤,但它对我们有所帮助。

然后我们有我们的项目,也在流中:

//Project1/main/...
//Project1/r1_0/...
//Project2/main/...
//Project2/r1_0/...

对于每个项目流,使用import指令包含库,因此//Project1/main/...的流规范将为:

share ...
import LibraryA/...  //LibraryA/main/...
import LibraryB/...  //LibraryB/r1_0/...

在这种情况下,share行声明main的子流将共享直接属于流的所有文件,import行表示将特定库只读导入到目录中在溪流中。在这种情况下,流//LibraryA/main/...将作为LibraryA/...导入树中,等等。

/Project1/main/的签出版本中的结果:

project1.html
images/p1i1.jpg
images/p1i2.jpg
LibraryA/l1c1.c
LibraryA/l1c2.c
LibraryB/l2c1.c
LibraryB/l2c2.c

当对/LibraryA/main/...流或/LibraryB/r1_0流进行更改且/Project1/main/...p4 sync ...时,您将获得每个库的最新代码。

至于qa / dev / stage / prod环境,从你的问题定义中可以看出它们有何不同之处,但这里有两个选择:

如果它们只是环境,您可以将它们设置为流工作区,并且它们可以单独用于检出并可能修改数据版本。

如果它们应该暗示从dev-> qa> stage-> prod或类似的进程移动,您可以将它们实现为流并明确地促使代码从一个移动到另一个。例如:

//Project1/dev
//Project1/qa
//Project1/stage
//Project1/prod

在这种情况下,dev将是主线流,qa可能是使用虚拟流类型的只读流,如果他们根本没有编辑能力。 stage可能是来自dev信息流的发布信息流。

这种结构大部分取决于您如何定义开发过程。在更敏捷的流程中,主线分支应与您的 dev 分支保持非常接近,您可以使用持续交付来保持稳定<强>主线即可。在更多的瀑布流程中,您可能会有发布分支,这些分支会从主线分支接收代码,以便进行测试并转移到生产环境。