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?
Teniendo en cuenta la historia de git, esa es una dirección divertida para migrar. –
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? –
Guau, hombre, lo siento. Parece que te mueves como 10-15 años hacia atrás. – Jonathan