我使用Perforce来管理多个Web应用程序。所有应用程序共享公共前端文件(css,JS和java速度代码)。我想创建一个vanilla应用程序,并与其他应用程序共享文件。开发人员将无法在子应用程序中编辑这些文件(类似于p4流导入),但当他们同步到应用程序时,它将下拉应用程序文件和(副本)共享文件。编辑这些文件只会在vanilla应用程序中进行。
我一直试图通过流来获得解决方案。问题(与标准工作空间映射一样)是我无法将文件映射到许多地方。
我已将我的香草应用程序构建为主流(本身是来自各个位置的工具集合)。然后,我使用共享和导入的组合为每个应用程序创建了开发分支。必须创建工作空间以匹配每个流。
这使得每个应用程序都有四个环境(dev,qa,stage,live)。我没有看到关于这个问题的明确路径。
什么对我们不起作用:
我们是溪流新手,习惯于整个仓库的一个工作空间。也许我只需要放弃它?
答案 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 分支保持非常接近,您可以使用持续交付来保持稳定<强>主线即可。在更多的瀑布流程中,您可能会有发布分支,这些分支会从主线分支接收代码,以便进行测试并转移到生产环境。