10

我的 p4 存储库的结构类似于:

//depot/project/branch1
//depot/project/branch2
//depot/project/branch3
... etc

但是,当我git-p4用来克隆“项目”时,所有 3 个分支都不被视为分支,并且都被克隆到单个主分支中。

这就是我调用的方式git-p4

git-p4 clone --detect-branches //depot/project

我期待git-p4为“ project”创建一个具有三个分支的 git 数据库,项目的根目录将映射到分支名称之后的路径部分(例如:如果//depot/project/branch1有一个名为“ lib”(//depot/project/branch1/lib)的子目录,那么我的本地文件系统应该类似于/git_project/lib3 个 git 分支)。

我的期待错了吗?我调用git-p4不正确吗?

4

2 回答 2

1

如果您查看git-p4 代码最初也是在这里),您会看到:

if self.detectBranches:
  branches = self.splitFilesIntoBranches(description)
  for branch in branches.keys():
    ## HACK  --hwn
    branchPrefix = self.depotPaths[0] + branch + "/"

探索分支的splitFilesIntoBranchesp4 存储库。

所以也许git-p4 clone //depot/project@all --detect-branches会很好(在这个SO 答案中使用 @all ,以及--detect-branches在 repo 路径之后的选项)?

话虽这么说,如果脚本不够聪明,无法管理它,可能更简单的解决方案是运行它 3 次,每个分支运行一次,然后将结果导入一个 Git 存储库。

于 2010-04-29T17:10:49.487 回答
0

我刚刚研究了一个相关的错误--detect-branches。该脚本做了一些事情:

  1. 使用 p4 数据检测分支名称
  2. 创建每个分支父级的映射
  3. 将文件映射到特定分支
  4. 在提交到 git 之前删除分支前缀

您必须遵循代码以确保每个步骤都正确完成。用来pdb做这个工作得很好。

第 1 步和第 2 步在P4Sync.getBranchMapping

第 3 步在P4Sync.splitFilesIntoBranches

对于第 4 步。这是通过P4Sync.stripRepoPath. 在那里设置一个断点,您可以查看是否检测到分支并且文件是否正确重命名。

于 2012-08-18T04:43:46.420 回答