如何让--detect-branches与git-p4一起使用?

时间:2010-04-29 14:11:10

标签: git perforce git-p4

我的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/lib,带有3个git分支。)

我怀疑错了吗?我是否错误地调用了git-p4

2 个答案:

答案 0 :(得分:1)

如果你看git-p4 code(也是originally here),你会看到:

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

splitFilesIntoBranches探索p4 repo for branches。

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

话虽如此,如果脚本不够智能来管理它,可能更简单的解决方案是运行3次,每个分支一个并将结果导入一个Git仓库。

答案 1 :(得分:0)

我刚刚与--detect-branches处理了相关的错误。该脚本做了一些事情:

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

    您必须按照代码确保每个步骤都正确完成。使用pdb执行此操作非常有效。

    步骤1和2在P4Sync.getBranchMapping

    中完成

    第3步在P4Sync.splitFilesIntoBranches

    中完成

    对于第4步,这是使用P4Sync.stripRepoPath完成的。在那里设置一个断点,你可以看到是否检测到分支并正确地重命名文件。