2010-01-31 15 views
5

Me gustaría dos cosas:Xcode, Git, y construir intermedia carpetas

  1. para poder cambiar ramas en Git, y luego Ejecutar o construir en Xcode sin recompilar todo el proyecto.

  2. tienen git ignoran los archivos de compilación intermedios durante la fusión, por lo que no me pedirá que resuelva ningún conflicto.

Poner el intermedio construye carpeta fuera del proyecto, o el uso de .gitignore hacer caso omiso de esa carpeta, logra # 2, pero no # 1; Tengo que reconstruir todo el proyecto cuando cambio ramas, incluso si no modifiqué ningún archivo.

+0

Sugeriría ccache, pero google sugiere que no funciona con xcode por alguna razón. Quizás otra pregunta si esta es tu experiencia también. – ergosys

+0

Si entiendo correctamente, la configuración de compilación de xcode cambia de una rama a otra, por lo que todo se vuelve a compilar cada vez; desearía poder definir una ruta de directorio de construcción intermedia diferente para cada rama. Que es lo que estoy buscando, como tú. – moala

+0

avance rápido a xcode 8.1.2 y todavía me enfrento a este problema aunque la construcción y/o el directorio intermedio ya no estén dentro de la jerarquía del directorio del proyecto de manera predeterminada – Zennichimaro

Respuesta

1

Bueno, usted mismo ha respondido # 2 correctamente, así que realmente su pregunta solo se relacionó con el # 1. Realmente no veo por qué Xcode tendría que volver a compilar las cosas tampoco: git no cambiará la marca de tiempo en los archivos sin cambios cuando se cambian las ramas.

¿Realmente ha implementado la solución n. ° 2, para que todo el problema no sea causado por el pisotoneado en su directorio de compilación, que debería ser .gitignore 'd?

+0

Los archivos están en la compilación/carpeta predeterminada, y .gitignore ignora build /. (Creo que casi todo el mundo hace esto). Cuando construyes sin editar los archivos fuente, git muestra que nada ha cambiado. Bueno.Cerré el proyecto en Xcode, cambié la rama en git y volví a abrir el proyecto en Xcode. Los archivos de compilación no estaban en git, por lo que no se modificaron, lo que significa que son los archivos de compilación incorrectos para la rama actual y Xcode debe reconstruir todo. Luego regreso a la primera rama y Xcode tiene que reconstruir todo de nuevo. Entiendo por qué Xcode tiene que volver a compilar. –

+0

Pero si los archivos no han cambiado (ni en el contenido ni en la marca de tiempo), los archivos de compilación no son "incorrectos". A menos que, por supuesto, la nueva sucursal utilice diferentes configuraciones de compilación, en cuyo caso no es forma de evitar una recompilación. No soy fuerte en Xcode, pero ¿podría ser que el cierre y la reapertura del proyecto provoquen la reconstrucción? –

+0

Los archivos de compilación son incorrectos porque los archivos de origen son diferentes. Cambiar a una rama diferente cambia a un conjunto diferente de archivos fuente, pero no cambia los archivos de compilación que lo acompañan; todavía estás usando los archivos de compilación de la rama anterior, y son diferentes. El dilema es: si git ignora los archivos de compilación, entonces no se cambian cuando cambias de rama y deben reconstruirse; OTOH si git no ignora los archivos de compilación, entonces intenta fusionarlos, lo cual tampoco quieres. –

0

Xcode va a hacer todos sus datos en función de las marcas de tiempo de los archivos en cuestión. Si reemplaza el archivo con un archivo más nuevo, entonces Xcode debe notar que la marca de tiempo del archivo es más reciente que la marca de tiempo del producto de compilación y recompilarlo.

Sin embargo, si lo cambia con una versión aún más antigua del archivo fuente, entonces no puede saber que el archivo de compilación no es correcto. Simplemente verá que el resultado de compilación es aún más nuevo que el archivo de origen y, por lo tanto, no lo recompila.

En resumen, no puede saber qué archivos han cambiado definitivamente, y cuáles definitivamente no. Es mejor que haga una limpieza completa + reconstrucción para asegurarse; de lo contrario, perderás el tiempo de depuración cuando no funcione.

1

Se podría definir dos variables:

  • MY_BRANCH_NAME = branch_foo (adaptadas en cada rama)
  • TARGET_TEMP_DIR = $(CONFIGURATION_TEMP_DIR)/$(TARGET_NAME)$(MY_BRANCH_NAME).build (el mismo para todas las ramas)

De esta manera, las compilaciones de sus diferentes ramas se hacerse y mantenerse en carpetas separadas, sin necesidad de volver a compilar todo debido a un cambio de configuración de rama a rama.

Puede hacerlo en archivos xcconfig, o definir automáticamente MY_BRANCH_NAME como un argumento xcodebuild en un script de compilación, entre otros medios.

+0

Me gusta esta idea y la probaré. –