Difficulté à importer toutes les branches de perforce dans Git Repo
Question
J'essaie d'importer un projet du dépôt de performance de mon entreprise dans un référentiel GIT. J'ai réussi à obtenir une seule branche en un seul repo git, mais ce que j'aimerais faire est de tirer dans tout le projet et de toutes les branches, mais je ne peux pas l'obtenir correctement.
J'ai mon fichier .P4Settings:
P4PORT=perforce-server.local:1666
P4USER=my.username
P4CLIENT=my.clientspec.name
ClientPec est assez simple:
//project/... //my.clientspec.name/project/...
-//project/External/... //my.clientspec.name/project/External/...
La deuxième ligne consiste à exclure les fichiers binaires de la bibliothèque externes de la caisse.
J'utilise la ligne de commande suivante pour démarrer GIT-P4 Importer:
git p4 clone --verbose --detect-branches --max-changes=100 //project/...@all
Ceci passe et vérifie toutes les succursales, etc. et les tentatives d'importation à partir du premier commit (ce projet particulier commence à Changeelist 771)
Importing from //project/...@all into project
Initialized empty Git repository in /Users/grant/Development/git_test/project/.git/
Reading pipe: git config git-p4.useclientspec
Reading pipe: git config git-p4.user
Reading pipe: git config git-p4.password
Reading pipe: git config git-p4.port
Reading pipe: git config git-p4.host
Reading pipe: git config git-p4.client
p4 -G branches
Opening pipe: p4 -G branches
p4 -G branch -o branch-1
Opening pipe: p4 -G branch -o branch-1
Reading pipe: git config --bool core.ignorecase
p4 -G branch -o branch-2
...
Opening pipe: p4 -G branch -o branch-n
p4-git branches: []
initial parents: {}
Je ne sais pas si les branches P4-Git et les parents initiaux sont censés être vides ici, mais ils sont.
Enfin, nous arrivons au point où il est sur le point de commencer à importer des changelistes en Git et ce qui suit se produit:
Getting p4 changes for //project/...
p4 changes //project/...
Reading pipe: p4 changes //project/...
p4 -G describe 771
Opening pipe: p4 -G describe 771
Importing revision 771 (1%)branch is MAIN
Importing new branch RCMerge/MAIN
p4 changes //RCMerge/MAIN/...@1,770
Reading pipe: p4 changes //RCMerge/MAIN/...@1,770
Resuming with change 771
parent determined through known branches: Branch-foo
looking for initial parent for refs/remotes/p4/project/MAIN; current parent is refs/remotes/p4/project/Branch-foo
commit into refs/remotes/p4/project/MAIN
parent refs/remotes/p4/project/Branch-foo
p4 -G -x - print
Opening pipe: p4 -G -x - print
Glue/source/.empty
fatal: Invalid ref name or SHA1 expression: refs/remotes/p4/project/Branch-foo
fast-import: dumping crash report to .git/fast_import_crash_26002
Voici le fichier référencé ci-dessus:
fast-import crash report:
fast-import process: 26002
parent process : 26000
at Thu May 19 11:51:54 2011
fatal: Invalid ref name or SHA1 expression: refs/remotes/p4/project/Branch-foo
Most Recent Commands Before Crash
---------------------------------
checkpoint
commit refs/remotes/p4/project/MAIN
committer Some User <some.user@domain.com> 1253574589 -0800
data <<EOT
* from refs/remotes/p4/project/Branch-foo
Active Branch LRU
-----------------
active_branches = 0 cur, 5 max
pos clock name
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Inactive Branches
-----------------
refs/remotes/p4/project/MAIN:
status : dirty
tip commit : 0000000000000000000000000000000000000000
old tree : 0000000000000000000000000000000000000000
cur tree : 0000000000000000000000000000000000000000
commit clock: 0
last pack :
Marks
-----
-------------------
END OF CRASH REPORT
Maintenant, étant un novice de perforce, je n'ai aucune idée de ce que cela signifie et je n'ai aucune idée de la façon de résoudre ce problème, ou si c'est même possible. Quelqu'un a-t-il rencontré un problème similaire avant? Si oui, comment l'avez-vous résolu?
La solution
I've finally figured out the solution to this problem. It turns out that a Perforce branch mapping was done in reverse and that was the source of this problem.
Branch-foo was branched off of MAIN, which should have a branch mapping like so:
//project/MAIN/... //project/Branch-foo/...
However, the person who created the branch, reversed the mapping, thus resulting in this:
//project/Branch-foo/... //project/MAIN/...
This confused git-p4 as MAIN had the first changelists starting at #771 and Branch-foo had changelists starting at #7652, thus it couldn't find any parent in Branch-foo and crashed. Changing the branch spec to the first one listed above fixed the probblem.