2010-10-15 8 views
16

Tengo la tarea de migrar mi equipo & fuente de git a Perforce, y estoy buscando ideas sobre cómo mover el historial de git a p4.Migrando de git a Perforce

Estaría encantado de mover la rama principal solamente. Sin embargo, incluso eso está resultando problemático.

Estoy usando la maravillosa herramienta git-p4. Creo un área de destino en mi espacio de trabajo p4 y uso git p4 clone //depot/StuffFromGit para comenzar a rastrearlo en git-p4. Injerto todos los cambios de mi repositorio git en el clon git-p4. Puedo entonces git p4 submit y listo, todos los cambios se envían a p4.

funciona muy bien cuando la historia Git tiene este aspecto, agradable y lineal:

A---B---C---D 

El problema viene con varias personas que trabajan en el proyecto. A pesar de que están trabajando en master, eso aún crea ramas que se dividen y fusionan. Aún así, git-p4 con valor maneja esto:

A---B---C---E 
    \--D--/ 

git p4 atraviesa OK, comprometiéndose con el fin ABCDE (o la historia ABDCE, ya sea de la persona en primer lugar).

El problema surge cuando, por ejemplo, C y D cambian el mismo archivo, y E es una combinación real de honestidad. git p4 rebase falla aquí; rebobinará los commits, pero durante la reproducción aplicará C primero, luego intentará D y encontrará un conflicto. Entonces se detendrá y me pedirá que me una. Bueno, E contiene la fusión pero me está pidiendo fusionar a mano. 'git p4 submit' fallará de manera similar, solo que ahora es p4 rechazando el cambio previo a la fusión.

 
Using index info to reconstruct a base tree... 
Falling back to patching base and 3-way merge... 
Auto-merging main.cpp 
CONFLICT (content): Merge conflict in main.cpp 
Failed to merge in the changes. 
Patch failed at 0005 Changing main 

Así que ahora estoy atascado. ¿Hay alguna forma de desinfectar el historial de git o hacer que git-p4 lo entienda? Es frustrante ya que las fusiones están ahí.

pensamientos que he tenido:

  • uso git filter-branch para eliminar toda mención de archivos en conflicto. Me gustaría obtener los comentarios de la historia, aunque me faltan muchos cambios de archivos. Con cerca de 3000 commits en la historia, terminaría eliminando todo el historial de los archivos clave (ocupados). Al final de la importación de archivos filtrados, volvería a agregar los archivos que faltan haciendo un commit final de HEAD.
  • Vuelca la historia, haz un solo compromiso de p4 de HEAD (simple pero triste).
  • No pasar a p4: He trabajado esa idea durante el mayor tiempo posible.

Ninguno de los cuales es realmente genial. ¿Alguna idea sobre cómo git 'gt p4 rebase' o 'git p4 submit' para que funcione?

+14

Teniendo en cuenta la historia de git, esa es una dirección divertida para migrar. –

+2

Parece que git-p4 está intentando fusionar C, D ** y ** E, y por supuesto fracasando miserablemente. ¿Ha comprobado que está ejecutando el último git-p4 y si hay algunos parches u otras personas han visto el mismo problema? –

+16

Guau, hombre, lo siento. Parece que te mueves como 10-15 años hacia atrás. – Jonathan

Respuesta

6

La opción de "simplemente descartar la historia anterior" no es tan mala como suena: simplemente puede mantener su repositorio git junto a ella para siempre, en caso de que alguien necesite excavar a través de las cosas viejas. Desafortunadamente, no hay forma de representar la visión compleja de la historia de git en sistemas lineales antiguos como svn y p4.

La razón principal para mirar hacia atrás en la historia antigua es para cosas como 'git annotate' (supongo que p4 tiene una herramienta similar).Si eso es todo lo que quieres, entonces tal vez lo que realmente quieres hacer es aplastar todas tus confusiones de fusión solo a uno de sus padres (para que se vean como una única confirmación en lugar de una combinación). Eso es más como lo que svn y p4 habrían registrado en su propio modelo de historial, donde las fusiones simplemente parecen una única confirmación en la transmisión lineal. Probablemente puedas hacer esto con git-filter-branch o similar. Por supuesto, esto perdería toda la historia que sucedió en las subdivisiones ... pero los usuarios de p4 están acostumbrados a no tener esa información.

+0

Perforce no suele usar sub -branches, pero puede si quieres administrar las sucursales. Entonces la información está ahí. –

-2

Creo que deberías probar con Tortoise SVN y luego Hg teniendo en cuenta la actualización de una sola rama o puedes decir la migración. Asegúrate de tener todo el volcado clonado para estar seguro. ¡Buena suerte!

2

¿Has comprobado la herramienta "sastre"? Es construir para sincronizar diferentes VCS: es. Se supone que tiene soporte de Perforce.

Como nota al margen, mi primera reacción sería cuestionar seriamente la decisión, pero supongo que ya lo has hecho.