Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Perforce,在多个具有权限的项目中共享文件_Perforce_Perforce Stream - Fatal编程技术网

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

使用Perforce,在多个具有权限的项目中共享文件,perforce,perforce-stream,Perforce,Perforce Stream,我使用Perforce管理多个web应用程序。所有应用程序共享公共前端文件(css、JS和java velocity代码)。我想创建一个普通的应用程序,并与其他应用程序共享文件。开发人员将无法在子应用程序中编辑这些文件(类似于p4 streams import),但当他们同步到应用程序时,它将下拉应用程序文件和(一份)共享文件。编辑这些文件只会发生在香草应用程序中 我一直在尝试通过streams找到解决方案。问题(与标准工作空间映射一样)在于我无法将文件映射到多个位置 我已经将我的vanilla

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

我一直在尝试通过streams找到解决方案。问题(与标准工作空间映射一样)在于我无法将文件映射到多个位置

我已经将我的vanilla应用程序构建为主流(它本身就是perforce中不同位置工具的集合体)。然后,我使用共享和导入的组合为每个应用程序创建了开发分支。必须创建一个工作区来匹配每个流

更复杂的是,每个应用程序都有四个环境(开发、质量保证、阶段、现场)。在这个问题上我看不到一条清晰的道路

什么对我们不起作用:

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

我们不熟悉streams,并且习惯于为整个仓库提供一个工作区。也许我只需要放弃它?

您应该能够轻松地使用streams完成此操作。假设我了解您在做什么,我们使用streams解决了类似的问题

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

//LibraryA/main/...
//LibraryB/main/...
//Project1/main/...
//Project1/r1_0/...
//Project2/main/...
//Project2/r1_0/...
对于主要版本,它们被锁定到发行版:

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

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

//LibraryA/main/...
//LibraryB/main/...
//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\u 0
流进行更改时,
/Project1/main/..
p4 sync…
,则您将获得每个库的最新代码

至于qa/dev/stage/prod环境,从您的问题定义来看,这些环境之间的区别并不十分清楚,但这里有两个选项:

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

如果它们被认为意味着从dev->qa->stage->prod或类似的流程移动,那么您可以将它们实现为流,并显式地将代码从一个移动到下一个。例如:

//Project1/dev
//Project1/qa
//Project1/stage
//Project1/prod
在这种情况下,
dev
将是一个mainline流,
qa
可能是一个只读流,使用virtual流类型,如果它们根本没有编辑功能<代码>阶段可能是来自
dev
流的发布

这种结构很大程度上取决于您如何定义您的开发过程。在更灵活的流程中,主线分支应与您的开发分支保持非常近的距离,您可以在稳定的主线之外使用连续交付。在更多的瀑布式流程中,您可能会有发布分支,这些分支从主线分支接收代码,用于测试和转移到生产