My p4 repository has a structure similar to:
//depot/project/branch1
//depot/project/branch2
//depot/project/branch3
... etc
However, when I use git-p4
to clone "project", all 3 branches are not considered as branches and all get cloned into the single master branch.
This is how I'm invoking git-p4
:
git-p4 clone --detect-branches //depot/project
I was expecting git-p4
to create a git database for "project
" with three branches, and the root of the project would be mapped to the portion of the path after the branch name (for example: if //depot/project/branch1
has a subdirectory called "lib
" (//depot/project/branch1/lib
) then my local file system should be something like /git_project/lib
with 3 git branches).
Is what I'm expecting wrong? Am I invoking git-p4
incorrectly?
If you look at git-p4 code (also originally here), you see:
with
splitFilesIntoBranches
exploring the p4 repo for branches.So maybe
git-p4 clone //depot/project@all --detect-branches
would be fine (with the @all as in this SO answer, and the--detect-branches
option after the repo path)?That being said, if the script is not smart enough to manage that, may be a simpler solution is to run it 3 times, one per branch and import the result in one Git repo.
I just worked on a related bug with
--detect-branches
. The script does a few things:You'll have to follow the code to make sure each step is being done correctly. Using
pdb
to do this works well enough.Step 1 and 2 is done in
P4Sync.getBranchMapping
Step 3 is done in
P4Sync.splitFilesIntoBranches
For step 4. this is done with
P4Sync.stripRepoPath
. Set a break point there, and you can see if the branches have been detected and files are being renamed properly.