2010-01-18 7 views
6

Tengo un proyecto Xcode bajo git y tengo una rama "experimental" fuera de mi rama "maestra". Ambas ramas han divergido desde la rama (¡así que no hay reenvío rápido!), Y estoy fusionando "experimental" en mi rama "maestra".Git Fusión de archivos binarios (en particular archivos de proyecto Xcode)

He configurado un archivo .gitattributes para tratar un archivo Xcode particular (project.pbxproj) como binario, ya que debe tratarse como tal. Sin embargo, no estoy seguro exactamente cómo combinarlo. No estoy seguro de qué hace ese archivo en particular, pero si, por ejemplo, manejaba qué archivos se agregaron al proyecto, no hay forma de que pueda fusionarlos, y por lo tanto tendría que agregar manualmente ciertos archivos al proyecto (posiblemente no recordándolos a todos). ¿Cómo manejan los demás esta situación?

Además, he leído que tienes que actualizar manualmente los archivos binarios (obviamente) o copiarlos en diferentes versiones. Sin embargo, una vez que estoy en el proceso de fusión, el archivo en mi copia de trabajo es la versión "maestra". ¿Cómo puedo acceder a la versión "experimental"? No puedo verificarlo ya que interrumpiría el proceso de fusión.

¡Gracias por su tiempo!

Respuesta

9

En general, para archivos binarios, recomiendo copy-merge type of .gitattribute directive.
Es decir, solo copio el archivo procedente del extremo remoto de una combinación.

Para archivos .pbxproj sin embargo, esa puede no ser una buena opción, como described here.

Envolver estos archivos solo empeoraría el problema por lo que puedo decir, ya que no podría fusionar los cambios por completo.
Si bien puede fusionar archivos de proyectos en algunos casos, no es algo que deba hacer con . La recomendación básica es evitar editar los archivos del proyecto al mismo tiempo que otra persona.

me gusta versionning archivos de proyectos (como el ones for Eclipse), sólo si sé que son:

  • sin modificar que a menudo (ciertamente no por cada uno de los desarrolladores)
  • solamente utilizando rutas relativas
  • no hay datos específicos para una estación de trabajo

En resumen, si los archivos no se van a fusionar (o solo serán tri vial para fusionar), los quiero en un VCS. En su caso, puede que no sea tan útil tenerlos en dicho VCS en primer lugar.


Nota: como se mencionó en el Git manual:

Durante la fusión, el índice tiene tres versiones de cada archivo. Cada una de estas tres etapas "archivo" representa una versión diferente del archivo:

$ git show :1:file.txt # the file in a common ancestor of both branches 
$ git show :2:file.txt # the version from HEAD. 
$ git show :3:file.txt # the version from MERGE_HEAD 
+2

Véase también http://stackoverflow.com/questions/101752/aborting-a-merge-in-git#107860 – VonC

+0

http://www.iphonedevsdk.com/forum/mac-os-x-development/13586-danger-modifying-pbxproj-file.html puede ser relevante también. – VonC

+0

¡Gracias por la información!Terminé ejecutando git mergetool (con opendiff) y lo manejé con FileMerge. Bastante inconsútil. ¡No me di cuenta de que git handle tiene todas las copias del archivo en conflicto para ti! ¡Gracias! –

Cuestiones relacionadas