使用 git-p4 克隆部分 Perforce 存储库

cmc*_*nty 5 git perforce git-p4

选择性导入大型 Perforce 存储库的正确方法是什么?

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

此外,Perforce 似乎提供了另一个称为“客户端”视图的功能。之前没有用过Perforce,所以对使用模型有点陌生。我目前的理解是,p4在运行git p4 clone. 有人有完整的细节吗?

jam*_*lin 6

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

您可以通过有选择地包含 Perforce 存储库的一部分来修剪 Perforce 客户端。例如

//depot/main/path1/... //your-perforce-client/main/path1/...
//depot/main/path2/... //your-perforce-client/main/path2/...
Run Code Online (Sandbox Code Playgroud)

将只包括//depot/main/path1/and//depot/main/path2/和 not //depot/main/path3/。正如您所指出的,您还可以明确排除路径。例如

//depot/main/path1/... //your-perforce-client/main/path1/...
-//depot/main/path1/foo/... //your-perforce-client/main/path1/foo/...
Run Code Online (Sandbox Code Playgroud)

将包括其子目录下的//depot/main/path1/ except文件中的所有内容foo

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

git p4 clone --destination=/path/to/new/git/tree //depot/path1 //depot/path2
Run Code Online (Sandbox Code Playgroud)

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

P4CLIENT=YOUR_PERFORCE_CLIENT_NAME
Run Code Online (Sandbox Code Playgroud)

然后设置环境变量:

P4CONFIG=.p4config
Run Code Online (Sandbox Code Playgroud)

这样做将使p4寻找一个.p4config文件在当前目录(然后逐步搜索的父目录)的Perforce的配置数据。

将被导入的文件将是Perforce 客户端规范包含的路径和命令行上明确提供的路径的交集git p4 clone

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


一个警告是,如果有一天您想包含 Perforce 存储库的其他部分,执行选择性克隆会增加额外的复杂性。如果您需要这样做,请参阅我对“git-p4初始克隆后扩展客户端规范”的回答