使用git-p4克隆部分Perforce回购

时间:2012-08-09 02:01:24

标签: git perforce git-p4

选择性导入大型Perforce回购的正确方法是什么?

git-p4文档提到您可以执行-//depot/main/ignore切换来过滤目录。这相当于在克隆后运行git filter-branch删除相同的目录吗?

此外,Perforce还提供了另一个称为“客户端”视图的功能。我之前没有使用Perforce,所以我对使用模型有点不熟悉。我目前的理解是,在运行p4之前,会以某种方式使用git p4 clone来设置正确的客户端视图。有没有人有完整的细节?

1 个答案:

答案 0 :(得分:4)

Perforce clientspec确定Perforce存储库的哪些部分可见(并将同步)到Perforce客户端。 clientspec还提供从Perforce存储库路径到本地路径的映射。

您可以通过选择性地包含部分Perforce存储库来修剪Perforce客户端:

//depot/main/path1/... //your-perforce-client/main/path1/...
//depot/main/path2/... //your-perforce-client/main/path2/...

仅包含//depot/main/path1///depot/main/path2/,而不包括//depot/main/path3/。正如您所指出的,您还可以明确地排除路径:

//depot/main/path1/... //your-perforce-client/main/path1/...
-//depot/main/path1/foo/... //your-perforce-client/main/path1/foo/...

//depot/main/path1/ 中的所有内容包括在foo子目录下的文件中。

根据您的Perforce存储库的结构以及您希望包含(或排除)的内容,您可以直接告诉git-p4要导入的Perforce树的哪些部分:

git p4 clone --destination=/path/to/new/git/tree //depot/path1 //depot/path2

如果要使用排除项,或者如果要调整Perforce depot路径映射到本地路径的方式,则需要添加--use-client-spec选项。您可以通过在Git树的父目录中创建.p4config文件来配置应使用的Perforce客户端:

P4CLIENT=.p4config

然后设置环境变量:

P4CONFIG=.p4config

执行此操作将导致p4在当前目录中查找.p4config文件(然后逐步搜索父目录)以获取Perforce配置数据。

将导入的文件将是Perforce clientspec包含的路径的交集以及git p4 clone命令行中明确提供的路径。

(正如您所提到的,git-p4 clone允许通过在-前添加前缀来排除路径。但是,我不建议这样做,因为这意味着只有在初始导入时才会排除这些路径。如果将来在Perforce中触及该路径中的文件,执行git p4 rebase / git p4 sync将获取这些已更改的文件(除非您记得再次在命令行中明确地将它们排除)。最初使用但是,--use-client-spec会在.git/config设置一个标记,以便在将来使用git p4 rebase / git p4 sync时自动兑现。)

有一点需要注意,如果有一天你想要包含Perforce存储库的其他部分,那么执行选择性克隆会增加额外的复杂性。如果您需要,请参阅my answer to "Extending git-p4 clientspec after initial clone"