iphone - Cómo combinar conflictos(archivo project.pbxproj) en Xcode use svn?
(8)
A veces se pueden recrear uno o pocos archivos (por ejemplo, ManagedObjects) en diferentes ramas, por lo que cuando se fusionen puede haber dos declaraciones para un archivo en un bloque. En este caso, debe eliminar una de las declaraciones.
Hay dos miembros en nuestro equipo. Usamos SCM de Xcode (use SVN) para gestionar nuestros archivos de código fuente.
Todos agregamos archivos a nuestro proyecto de Xcode. Él se ha comprometido con el servidor SVN. Cuando actualizo, Xcode encuentra que hay conflictos en el archivo project.pbxproj
. Luego selecciono salir de Xcode
y fusionar los conflictos manualmente. Luego empiezo a editar mi project.pbxproj
, fusionar nuestros cambios. En realidad, no sé cómo administra los archivos de Xcode, solo agrego algo de texto que mi archivo project.pbxproj
no tenía. Cuando termino, mi proyecto no se puede abrir. Supongo que porque el archivo project.pbxproj
no se puede editar por manual.
Entonces, quiero saber, cuando encuentre este problema, que el archivo project.pbxproj tiene conflictos, ¿cómo resolverlo?
¡Gracias!
Como se indicó anteriormente, la forma más común de manejar los conflictos es
- aceptar "todo"
- volver a importar los archivos en el proyecto
Escribí un script bash que se encarga de (1) arriba.
Tenga en cuenta que esto solo resolverá el caso más común de conflictos de combinación.
#!/bin/bash
#
#
#
if [ $# -eq 0 ]
then
echo "File must be provided as argument, darnit!"
exit 1
fi
if [ $# -eq 2 ]
then
echo "only ONE File must be provided as argument, darnit!"
exit 1
fi
echo "Will remove lines from file:" $1
grep -v "<<<<<" $1 | grep -v ">>>>>>" | grep -v "====" > out.tmp;mv out.tmp $1
echo "Done removing lines from file:" $1
Esta solución es solo para git, pero puede agregar un archivo .gitattributes
a su proyecto y luego agregar la siguiente línea dentro de ese archivo:
*.pbxproj merge=union
Esto le dirá a git que mantenga ambos lados de la fusión, que será lo que quiera la gran mayoría del tiempo.
Estaba buscando una solución directa a este problema cuando me encontré con esta otra pregunta / respuesta:
https://.com/a/14180388/307217
Me quedé completamente impresionado por lo simple que es esta solución, estaba tratando de fusionarme en una rama de características dispares que tenía casi 200 revisiones detrás del maletero, XCode y Mercurial no estaban siendo felices campistas al respecto. Intenté fusionar manualmente el archivo pbxproj (que tenía más de 100 conflictos) 8 veces antes de probar esta solución.
Básicamente, la solución es como tal (suponiendo que usas Mercurial, porque es increíble):
Intente su fusión en mercurial:
hg update FEATURE_BRANCH hg merge default *mercurial gives you a ton of crap about the pbxproj file having merge conflicts*
Abre Xcode
- Desde la barra de herramientas superior, selecciona Xcode-> Abrir Developer Tool-> FileMerge
- A la izquierda, abre el archivo conflictivo ''project.pbxproj'' (el que tiene marcado de conflicto de combinación)
- En el lado derecho, abre tu ''project.pbxproj.orig''
- Seleccione Archivo-> Guardar fusión y guarde el archivo ''project.pbxproj''
Luego, de vuelta a la línea de comando:
hg resolve -m ProjectName.xcodeproj/project.pbxproj *merge any other broken files* hg commit -m "manually merged with trunk"
- Come pastel porque ya estás hecho
Fundé una herramienta "xUnique" https://github.com/truebit/xUnique , ¡funciona!
Lamentablemente, no hay mucho que pueda hacer, excepto para realizar los cambios manualmente en una comprobación y luego registrarse en el nuevo proyecto "fusionado".
Lo mejor que puede hacer es simplemente aceptar su versión o su versión en su totalidad, sin intentar combinar ambas. Además, considere si el archivo en cuestión es algo que debería estar en el repositorio; puede ser más apropiado dejar que cada persona tenga su propia versión de la misma.
Consulte la documentation sobre cómo resolver conflictos.
Yo uso git pero vemos el mismo problema: si dos personas agregan archivos, hay un conflicto de fusión.
Por lo general, la edición es muy fácil. Simplemente entre en el archivo project.pbxproj con un editor de texto, y busque la sección de conflicto de combinación, generalmente esto está marcado por algo como:
>>>>>>>
Stuff 1
======
Stuff 2
<<<<<<<<
En el 99% de los casos de conflicto de fusión de proyectos de Xcode, simplemente quiere aceptar ambos lados de la combinación (porque dos personas agregaron diferentes archivos), por lo que simplemente eliminaría los marcadores de fusión, en el caso anterior que terminaría así:
Stuff 1
Stuff 2
Como dije, esto funciona muy bien en la mayoría de los casos. Si Xcode no leerá el archivo del proyecto cuando haya terminado, simplemente tome la versión no fusionada más reciente y agregue manualmente sus archivos nuevamente.