objective-c xml xcode git version-control

objective c - Fusionando archivos de proyecto de Xcode



objective-c xml (5)

A menudo hay conflictos en el archivo de proyecto Xcode (Project.xcodeproj / project.pbxproj) al fusionar ramas (estoy usando git). A veces es fácil, pero a veces termino con un archivo de proyecto corrupto y tengo que revertir. En el peor de los casos, tengo que arreglar el archivo del proyecto manualmente en una segunda confirmación (que puede ser aplastada con la anterior) arrastrando los archivos, etc.

¿Alguien tiene consejos sobre cómo manejar los conflictos de fusión en archivos grandes y complejos como el archivo de proyecto Xcode?

EDITAR - Algunas preguntas relacionadas:

Git y pbxproj

¿Debo combinar archivos .pbxproj con git utilizando merge = union?

RECURSOS:

http://www.alphaworks.ibm.com/tech/xmldiffmerge

http://www2.informatik.hu-berlin.de/~obecker/XSLT/#merge

http://tdm.berlios.de/3dm/doc/thesis.pdf

http://www.cs.hut.fi/~ctl/3dm/

http://el4j.svn.sourceforge.net/viewvc/el4j/trunk/el4j/framework/modules/xml_merge/


1) divida sus proyectos en bibliotecas / paquetes más pequeños y lógicos. Los proyectos masivos son con frecuencia el signo de un mal diseño, como el objeto que hace demasiado o es demasiado grande.

2) diseño para una fácil reconstrucción: esto también ayuda si está escribiendo programas que deben ser creados por múltiples herramientas o IDE. muchos de mis ''proyectos'' se pueden reconstruir agregando un directorio.

3) eliminar las fases de construcción extrañas. Ejemplo: he eliminado la fase de compilación "Copiar encabezados" de todos los proyectos. incluir explícitamente los archivos específicos a través de la directiva include.

4) Utilice archivos xcconfig siempre que sea posible. esto también reduce la cantidad de cambios que debe realizar al actualizar sus compilaciones. Los archivos xcconfig definen una colección de configuraciones de compilación y admiten #include . por supuesto, luego elimina la mayoría de las configuraciones definidas por el usuario de cada proyecto y destino cuando define el xcconfig a usar.

5) para dependencias de destino: cree objetivos que realicen operaciones lógicas, en lugar de operaciones físicas. este suele ser un destino de shell shell o un objetivo agregado. por ejemplo: "construir dependencias", "ejecutar todas las pruebas unitarias", "construir todo", "limpiar todo". entonces no tiene que mantener todos los cambios de dependencia en cada paso de una manera, es como usar referencias.

6) defina un "Árbol fuente" común para su código, y un segundo para fuentes de terceros.

7) hay herramientas de construcción externas disponibles. esta puede ser una opción para usted (al menos, para algunos de sus objetivos).

En este punto, un xcodeproj será mucho más simple. Requerirá menos cambios y será muy fácil de reconstruir. puede ir mucho más allá con estos conceptos para reducir aún más la complejidad de sus proyectos y construcciones.


Es posible que desee probar https://github.com/simonwagner/mergepbx/

Es un script que le ayudará a combinar archivos de proyecto XCode correctamente. Tenga en cuenta que sigue siendo alfa.

Descargo de responsabilidad: Soy el autor de mergepbx.


La mejor manera que he encontrado es instruir a Git para que trate el archivo .pbxproj como un archivo binario. Esto evita las fusiones desordenadas.

Agregue esto a su archivo .gitatributes:

*.pbxproj -crlf -diff -merge


Otra opción a considerar que puede ayudar a reducir la cantidad de veces que experimenta el problema. Para explicarlo, llamaré a la sucursal que las ramas de los miembros del equipo provienen de la rama "desarrollar". Tenga una convención en su equipo de que cuando se modifique el archivo del proyecto, los cambios (junto con cualquier otro cambio requerido para garantizar la integridad de la compilación) se confirmen en un compromiso separado. Ese commit es entonces cherry recogido en la rama desarrollada. Otros miembros del equipo que planean modificar el archivo de proyecto en su sucursal pueden entonces seleccionar su sucursal o rebautizar su sucursal en el desarrollo más reciente. Este enfoque requiere comunicación a través del equipo y algo de disciplina. Como dije, no siempre será posible; en algunos proyectos puede ayudar mucho y en algunos proyectos no.


Para comparar dos proyectos de Xcode, abra FileMerge abierto (abra xcode y seleccione Xcode (en el panel de menú) -> Abrir herramientas de desarrollador -> FileMerge). Ahora haga clic en el botón "izquierda" y abra el directorio principal del proyecto xcode. haga clic en el botón "derecho" y abra el directorio principal del proyecto xcode para comparar.

¡Ahora haz clic en el botón "fusionar"!

¡Eso es!