2010-04-29 14 views
9

mio repository p4 ha una struttura simile a:Come ottenere --detect-branches per funzionare con git-p4?

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

Tuttavia, quando uso git-p4 clonare "progetto", tutti e 3 i rami non sono considerati come rami e tutti vengono clonate nel ramo maestro unico.

Questo è come mi sto invocando git-p4:

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

mi aspettavo git-p4 per creare un database git per "project" con tre rami, e la radice del progetto sarebbe mappato alla quota di il percorso dopo il nome del ramo (ad esempio: se //depot/project/branch1 ha una sottodirectory denominata "lib" (//depot/project/branch1/lib), il mio file system locale dovrebbe essere qualcosa come /git_project/lib con 3 rami git).

È quello che mi aspetto male? Sto invocando git-p4 in modo errato?

+0

Hai mai avuto fortuna, Michael? Sto avendo un sacco di problemi con questo, anche utilizzando le specifiche del ramo come descritto su molti siti web. –

risposta

1

Se si guarda alla git-p4 code (anche originally here), si vede:

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

con splitFilesIntoBranches esplorare il repo p4 per le filiali.

Quindi forse git-p4 clone //depot/[email protected] --detect-branches andrebbe bene (con @all come in questo SO answer e l'opzione --detect-branches dopo il percorso repo)?

Detto questo, se lo script non è abbastanza intelligente per gestirlo, potrebbe essere una soluzione più semplice eseguire 3 volte, una per ramo e importare il risultato in un repository Git.

+0

Ho dato il "@all" una prova. Tuttavia, forse non funziona a causa di parentesi all'interno di altre parti del depot? Il ramo menzionato nell'output qui sotto non risiede nella parte del depot che sto cercando di clonare (è più in alto).(Ho nascosto nomi di progetto e nomi utente con "PROJECT" e "USER") –

+0

Archivio vuoto inizializzato Git in /cygdrive/c/projects/PROJECT/.git/ /bin/sh: -c: linea 0: errore di sintassi vicino a token imprevisto '(' /bin/sh: -c: riga 0:' p4 -G ramo -o dev_OtherProject (ASP.Net) _USER' Importazione revisione 181332 (0%) Importazione nuovo ramo PROJECT/Principale/dotNet Ripresa con cambio 181.332 fatale: ref name valido o un'espressione SHA1: refs/telecomandi/p4/PROGETTO/consegna/dotNet fast-import: il dumping relazione crash a .git/fast_import_crash_1832 non sarebbe in esecuzione: 3 volte, uno per ramo, crea 3 repository git? Pensavo che il clone git-p4 creasse sempre un nuovo repository. –

0

Ho appena lavorato su un bug correlato con --detect-branches. Lo script fa un paio di cose:

  1. rilevare i nomi dei rami utilizzando i dati P4
  2. creare una mappa del genitore di ogni ramo
  3. mappare i file in un ramo specifico
  4. rimuovere il prefisso ramo prima commit in git

Dovrai seguire il codice per assicurarti che ogni passaggio sia eseguito correttamente. Usare pdb per farlo funziona abbastanza bene.

Fase 1 e 2 è fatto in P4Sync.getBranchMapping

Fase 3 avviene in P4Sync.splitFilesIntoBranches

Per passo 4. questo è fatto con P4Sync.stripRepoPath. Qui puoi impostare un punto di interruzione e puoi vedere se i rami sono stati rilevati e i file vengono rinominati correttamente.

Problemi correlati