选择性导入大型Perforce回购的正确方法是什么?
git-p4文档提到您可以执行-//depot/main/ignore
切换来过滤目录。这相当于在克隆后运行git filter-branch
删除相同的目录吗?
此外,Perforce还提供了另一个称为“客户端”视图的功能。我之前没有使用Perforce,所以我对使用模型有点不熟悉。我目前的理解是,在运行p4
之前,会以某种方式使用git p4 clone
来设置正确的客户端视图。有没有人有完整的细节?
答案 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"。