1

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

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

我已经将我的香草应用程序构建为主流(它本身就是来自 perforce 中不同位置的工具的集合体)。然后,我使用 Share 和 Import 的组合为每个应用程序创建了 Development 分支。必须创建一个工作空间来匹配每个流。

更复杂的是,每个应用程序都有四个环境(dev、qa、stage、live)。我没有看到解决这个问题的明确路径。

什么对我们不起作用:

  • HTTP 分发。我们最初通过网络调用共享我们的 js 资源,但是当网站关闭时,这会带来问题。我们希望将 JS 文件(通过 p4)作为 LOCAL 文件分发。
  • 编译的 JAR。这些共享文件会经常更改,并且没有编译代码。这是一个解决方案,但没有一个是想要的。

我们是流的新手,并且习惯于为整个仓库使用一个工作区。也许我只需要放弃它?

4

1 回答 1

0

您应该能够毫不费力地使用流来做到这一点。假设我了解您在做什么,我们使用流解决了类似的问题。

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

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

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

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

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

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

//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/...is进行更改时p4 sync ...,您将获得每个库的最新代码。

至于 qa/dev/stage/prod 环境,从您的问题定义中不太清楚它们有何不同,但这里有两个选项:

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

如果它们应该暗示从 dev->qa->stage->prod 或类似的流程移动,您可以将它们实现为流并显式提升代码以从一个移动到下一个。例如:

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

在这种情况下,dev可能是主线流,如果根本没有编辑功能 ,则可能是使用虚拟qa流类型的只读流。可能是来自流的发布流。stagedev

这种结构很大程度上取决于您如何定义开发过程。在更敏捷的过程中,主线分支应该与您的开发分支保持非常接近,并且您可以使用稳定的主线持续交付。在更多的瀑布过程中,您可能会有发布分支,它们从主线分支接收代码以进行测试和移动到生产。

于 2013-10-15T09:37:06.720 回答