git在一个git repo中克隆多个p4路径

git在一个git repo中克隆多个p4路径,git,perforce,Git,Perforce,我知道如果我需要使用命令克隆一个perforce现有的p4存储库 git p4 clone //depot/path/project 但是如果我想将多个p4路径合并到一个git回购中呢? 假设我有以下结构 //depot---/Path1----/APath/... | | | | | --/BPath/... |

我知道如果我需要使用命令克隆一个perforce现有的p4存储库

git p4 clone //depot/path/project
但是如果我想将多个p4路径合并到一个git回购中呢?
假设我有以下结构

    //depot---/Path1----/APath/...
           |          |
           |          |
           |          --/BPath/...
           |       
           |     
           ---/Path2----/CPath/...
           |
           |
           ---/Path3
我只想克隆本地目录~/Desktop/mylocalRepo///depot/Path1/APath///depot/Path2/CPath/下的文件
如何做到这一点?

您可以使用git-p4的
--使用client spec
选项来做到这一点。请参阅中的“客户端规范”部分


当您使用此选项时,git-p4使用Performce客户端视图将仓库路径映射到git存储库中。通过使用所需的映射设置Perforce客户端,您可以有选择地导入Perforce仓库的部分内容。

我找到的解决方案是将不同的Perforce路径克隆到不同的Git存储库中,然后在保留历史记录的同时将其合并到新的存储库中

//depot/Projects/A
...
//depot/Projects/C
//depot/Projects/...
将Performance存储库克隆到git中:

git p4 clone //depot/Projects/A@all
git p4 clone //depot/Projects/C@all
然后创建一个空的Git存储库:

mkdir project
cd project
git init
添加存储库路径:

git remote add -f a ../A
git remote add -f c ../C
合并项目A:

git merge --allow-unrelated-histories a/master
将项目A移动到子目录中:

mkdir dir_a
find . -maxdepth 1 -not -name ".git" -and -not -name "dir_a" -exec git mv {} dir_a/ \;
提交更改:

git commit -m "Merge Project A"
合并项目C:

git merge --allow-unrelated-histories c/master
mkdir dir_c
find . -maxdepth 1 -not -name ".git" -and -not -name "dir_a" -and -not -name "dir_c" -exec git mv {} dir_c/ \;
git commit -m "Merge Project C"
使用Git:

$ git --version
git version 2.14.1

您看过Perforce的git集成(git Fusion)吗?这只是文档的重复。举一个例子会更有帮助。此外,P4文档中还指出:“注意:未测试)git p4 clone--use client spec命令行选项将git-p4限制为在Perforce客户端视图中可见的文件。不幸的是,-use client spec未经测试,使用它可能会导致文件丢失,或者排除/减去映射行被错误地视为包含。“虽然这个答案看起来可能是正确的,但事实并非如此。”。
--use client spec
标志对在何处克隆内容没有影响。这个方法对我来说很有意义。但我失败了,因为我有crlf问题,可能是因为我使用了带有二进制装入点的cygwin。当我尝试使用git config core.autocrlf true来解决crlf差异时,结果出现了一个不同的问题。最后,我遵循了这里描述的一组不同的指令:,这避免了crlf问题。请注意,我在进行git p4克隆时使用了--use client spec,然后在我的p4客户端的工作区视图中添加了更多路径。