使用Perforce,在多个具有权限的项目中共享文件
我使用Perforce管理多个web应用程序。所有应用程序共享公共前端文件(css、JS和java velocity代码)。我想创建一个普通的应用程序,并与其他应用程序共享文件。开发人员将无法在子应用程序中编辑这些文件(类似于p4 streams import),但当他们同步到应用程序时,它将下拉应用程序文件和(一份)共享文件。编辑这些文件只会发生在香草应用程序中 我一直在尝试通过streams找到解决方案。问题(与标准工作空间映射一样)在于我无法将文件映射到多个位置 我已经将我的vanilla应用程序构建为主流(它本身就是perforce中不同位置工具的集合体)。然后,我使用共享和导入的组合为每个应用程序创建了开发分支。必须创建一个工作区来匹配每个流 更复杂的是,每个应用程序都有四个环境(开发、质量保证、阶段、现场)。在这个问题上我看不到一条清晰的道路 什么对我们不起作用:使用Perforce,在多个具有权限的项目中共享文件,perforce,perforce-stream,Perforce,Perforce Stream,我使用Perforce管理多个web应用程序。所有应用程序共享公共前端文件(css、JS和java velocity代码)。我想创建一个普通的应用程序,并与其他应用程序共享文件。开发人员将无法在子应用程序中编辑这些文件(类似于p4 streams import),但当他们同步到应用程序时,它将下拉应用程序文件和(一份)共享文件。编辑这些文件只会发生在香草应用程序中 我一直在尝试通过streams找到解决方案。问题(与标准工作空间映射一样)在于我无法将文件映射到多个位置 我已经将我的vanilla
- 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
流的发布流
这种结构很大程度上取决于您如何定义您的开发过程。在更灵活的流程中,主线分支应与您的开发分支保持非常近的距离,您可以在稳定的主线之外使用连续交付。在更多的瀑布式流程中,您可能会有发布分支,这些分支从主线分支接收代码,用于测试和转移到生产