Perforce 工作区和多个分支
Perforce workspaces and multiple branches
我正在尝试找出在为代码库的不同部分处理多个分支时设置 Perforce 工作区的最佳方法。
假设我的默认工作区映射如下:
//depot/foo/trunk/... //my_client/trunk/foo/...
//depot/foo1/trunk/... //my_client/trunk/foo1/...
//depot/foo2/trunk/... //my_client/trunk/foo2/...
我需要同时使用 foo
和 foo1
,因为 foo1
依赖于 foo
。
现在,我想为 foo1
创建一个新分支,比如 branch1
但我不想为 foo
和 foo2
创建一个分支,但我需要与 foo
和 foo2
trunk 以及 foo1
branch1 一起工作。由于代码的结构方式,出于编译目的,foo1
和 foo2
需要位于同一文件夹中。
我应该使用以下映射创建另一个工作区吗?
//depot/foo/trunk/... //my_client/trunk/foo/...
//depot/foo1/branch1/... //my_client/branch1/foo1/...
//depot/foo2/trunk/... //my_client/branch1/foo/...
当我想在分支上工作时切换到这个工作区。注意 foo
仍然指向 //my_client/trunk/foo/
我的开发 IDE 是 Intellij,所以我将创建 2 个项目。第一个项目在主干中有 foo
、foo1
、foo2
的 3 个模块。第二个项目将有主干代码的现有模块 foo
,分支 1 中的 foo1
和主干中的 foo2
的新模块。
我首先尝试将所有这些映射到一个 perforce 工作区中,但很快发现我无法将仓库中的相同位置映射到同一工作区中的 2 个单独的本地位置。
对于我正在处理主干但没有创建分支的项目 foo
,我不想经历整个 project/Intellij 模块设置过程并希望重用现有的本地副本和设置。
这是解决这个问题的正确方法还是有更好的方法?我对 Perforce 还很陌生,但仍在弄清楚它是如何工作的。使用 Git.
可以很容易地设置类似的场景
当您尝试将所有内容都集中在一个工作区时,我不确定您的映射是什么样子,但听起来您想要:
//depot/foo/trunk/... //my_client/trunk/foo/...
//depot/foo1/trunk/... //my_client/trunk/foo1/...
//depot/foo1/branch1/... //my_client/branch1/foo1/...
这是一个完全有效的一对一映射。另一方面,这是行不通的:
//depot/foo/trunk/... //my_client/trunk/foo/...
//depot/foo/trunk/... //my_client/branch1/foo/...
//depot/foo1/trunk/... //my_client/trunk/foo1/...
//depot/foo1/branch1/... //my_client/branch1/foo1/...
因为一组 depot 文件被映射到两个位置 -- 但您说过您希望 "foo" 保留在其现有的本地位置,因此没有必要(或不需要)拥有它的两个副本) -- 正确吗?
如果您确实想要两个不同的 foo 副本(在 "branch1" 本地目录下有一个副本),那么我会通过两个客户端视图来实现:
//depot/foo/trunk/... //my_trunk_client/trunk/foo/...
//depot/foo1/trunk/... //my_trunk_client/trunk/foo1/...
和
//depot/foo/trunk/... //my_branch1_client/branch1/foo/...
//depot/foo1/branch1/... //my_branch1_client/branch1/foo1/...
请注意,在 "branch1" 客户端中,"trunk" 库路径映射到 "branch1" 客户端路径,这可能是您想要的(同样,如果您只是"trunk" 本地文件夹中的 "trunk" 分支,您可以在单个工作区内执行此操作)。
我正在尝试找出在为代码库的不同部分处理多个分支时设置 Perforce 工作区的最佳方法。
假设我的默认工作区映射如下:
//depot/foo/trunk/... //my_client/trunk/foo/...
//depot/foo1/trunk/... //my_client/trunk/foo1/...
//depot/foo2/trunk/... //my_client/trunk/foo2/...
我需要同时使用 foo
和 foo1
,因为 foo1
依赖于 foo
。
现在,我想为 foo1
创建一个新分支,比如 branch1
但我不想为 foo
和 foo2
创建一个分支,但我需要与 foo
和 foo2
trunk 以及 foo1
branch1 一起工作。由于代码的结构方式,出于编译目的,foo1
和 foo2
需要位于同一文件夹中。
我应该使用以下映射创建另一个工作区吗?
//depot/foo/trunk/... //my_client/trunk/foo/...
//depot/foo1/branch1/... //my_client/branch1/foo1/...
//depot/foo2/trunk/... //my_client/branch1/foo/...
当我想在分支上工作时切换到这个工作区。注意 foo
仍然指向 //my_client/trunk/foo/
我的开发 IDE 是 Intellij,所以我将创建 2 个项目。第一个项目在主干中有 foo
、foo1
、foo2
的 3 个模块。第二个项目将有主干代码的现有模块 foo
,分支 1 中的 foo1
和主干中的 foo2
的新模块。
我首先尝试将所有这些映射到一个 perforce 工作区中,但很快发现我无法将仓库中的相同位置映射到同一工作区中的 2 个单独的本地位置。
对于我正在处理主干但没有创建分支的项目 foo
,我不想经历整个 project/Intellij 模块设置过程并希望重用现有的本地副本和设置。
这是解决这个问题的正确方法还是有更好的方法?我对 Perforce 还很陌生,但仍在弄清楚它是如何工作的。使用 Git.
可以很容易地设置类似的场景当您尝试将所有内容都集中在一个工作区时,我不确定您的映射是什么样子,但听起来您想要:
//depot/foo/trunk/... //my_client/trunk/foo/...
//depot/foo1/trunk/... //my_client/trunk/foo1/...
//depot/foo1/branch1/... //my_client/branch1/foo1/...
这是一个完全有效的一对一映射。另一方面,这是行不通的:
//depot/foo/trunk/... //my_client/trunk/foo/...
//depot/foo/trunk/... //my_client/branch1/foo/...
//depot/foo1/trunk/... //my_client/trunk/foo1/...
//depot/foo1/branch1/... //my_client/branch1/foo1/...
因为一组 depot 文件被映射到两个位置 -- 但您说过您希望 "foo" 保留在其现有的本地位置,因此没有必要(或不需要)拥有它的两个副本) -- 正确吗?
如果您确实想要两个不同的 foo 副本(在 "branch1" 本地目录下有一个副本),那么我会通过两个客户端视图来实现:
//depot/foo/trunk/... //my_trunk_client/trunk/foo/...
//depot/foo1/trunk/... //my_trunk_client/trunk/foo1/...
和
//depot/foo/trunk/... //my_branch1_client/branch1/foo/...
//depot/foo1/branch1/... //my_branch1_client/branch1/foo1/...
请注意,在 "branch1" 客户端中,"trunk" 库路径映射到 "branch1" 客户端路径,这可能是您想要的(同样,如果您只是"trunk" 本地文件夹中的 "trunk" 分支,您可以在单个工作区内执行此操作)。