2010-04-29 13 views
9

Mi repositorio p4 tiene una estructura similar a:¿Cómo obtener --detect-branches para trabajar con git-p4?

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

Sin embargo, cuando se utiliza para clonar git-p4 "proyecto", los 3 ramas no son considerados como ramas y todos consiguen clonar en la rama individual maestro.

Esta es la forma en que estoy invocando git-p4:

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

que estaba esperando git-p4 para crear una base de datos git para "project" con tres ramas, y la raíz del proyecto sería asignada a la parte de la ruta después del nombre de la rama (por ejemplo: si //depot/project/branch1 tiene un subdirectorio llamado "lib" (//depot/project/branch1/lib), entonces mi sistema de archivos local debería ser algo así como /git_project/lib con 3 ramas de git).

¿Es lo que estoy esperando? ¿Estoy invocando git-p4 incorrectamente?

+0

¿Alguna vez has tenido suerte, Michael? Estoy teniendo muchos problemas con esto, incluso usando especificaciones de rama como se describe en muchos sitios web. –

Respuesta

1

Si nos fijamos en git-p4 code (también originally here), que se ve:

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

con splitFilesIntoBranches explorar el repositorio p4 para las sucursales.

Así que tal vez git-p4 clone //depot/[email protected] --detect-branches estaría bien (con @all como en este SO answer, y la opción --detect-branches después de la ruta de repositorio)?

Dicho esto, si la secuencia de comandos no es lo suficientemente inteligente como para gestionar eso, puede ser una solución más simple ejecutarla 3 veces, una por rama e importar el resultado en un repositorio de Git.

+0

Le di una oportunidad al "@all". Sin embargo, ¿quizás no funciona debido a paréntesis dentro de otras partes del depósito? La rama mencionada en el resultado a continuación no reside dentro de la parte del depósito que estoy intentando clonar (está más arriba).(He ocultado los nombres de los proyectos y los nombres de los usuarios con "PROJECT" y "USER") –

+0

Repositorio de Git vacío inicializado en /cygdrive/c/projects/PROJECT/.git/ /bin/sh: -c: línea 0: error de sintaxis cerca del token inesperado '(' /bin/sh: -c: línea 0:' p4 -G branch -o dev_OtherProject (ASP.Net) _USER' Importando revisión 181332 (0%) Importando nueva rama PROJECT/Main/dotNet Reanudando con el cambio 181.332 fatal: ref name no válida o expresión SHA1: refs/mandos a distancia/P4/PROYECTO/Entrega/dotNet fast-import: vertido informe de bloqueo a .git/fast_import_crash_1832 ¿no sería ejecutarlo 3 veces, uno por rama, crear repositorios de 3 gits ... Pensé que el clon git-p4 siempre creaba un nuevo repositorio. –

0

Acabo de trabajar en un error relacionado con --detect-branches. El script hace un par de cosas:

  1. detectar el nombre de rama a partir de datos p4
  2. crear un mapa de los padres de cada rama
  3. asignar los archivos a una rama específica
  4. eliminar el prefijo rama antes comprometiéndose con git

Deberá seguir el código para asegurarse de que cada paso se realiza correctamente. Usar pdb para hacer esto funciona bastante bien.

Paso 1 y 2 se realiza en P4Sync.getBranchMapping

Paso 3 se hace en P4Sync.splitFilesIntoBranches

Para el paso 4. Esta se realiza con P4Sync.stripRepoPath. Establezca un punto de quiebre allí, y puede ver si las ramas se han detectado y los archivos se renombran correctamente.

Cuestiones relacionadas