¿Deben ignorarse los archivos * .xccheckout en Xcode5 en VCS?

157

Apple ha introducido un nuevo tipo de archivo relacionado con el proyecto en Xcode 5: "xccheckout".

Este archivo se encuentra en el directorio ".xcodeproj / project.xcworkspace / xcshareddata /", y parece que está relacionado con el sistema de control de versiones del proyecto.

Un archivo de ejemplo está aquí: http://pastebin.com/5EP63iRa

Supongo que este tipo de archivo debería ignorarse en VCS, pero no estoy seguro.

Así que aquí están las preguntas:

  1. ¿Se debe ignorar "xccheckout"?
  2. ¿Cual es su propósito?
Artem Abramov
fuente
Esta pregunta tiende a ser bastante relevante; Por lo tanto, me gustaría que fuera más correcta gramatical y sintácticamente. Si eres hablante nativo de inglés o eres extremadamente competente en inglés, me gustaría pedir ayuda para verificar mi idioma. ¡Gracias!
Artem Abramov
1
Cambios menores sugeridos: "Apple ha introducido un nuevo", "Un archivo de ejemplo está aquí:". Hay una cita no coincidente en la pregunta 1.
Sofi Software LLC
3
Siempre me refiero al repositorio github / gitignore para saber qué archivos deben ignorarse -> github.com/github/gitignore/blob/master/Objective-C.gitignore
eliocs

Respuestas:

109

Usted debe comprobar en un Xcode 5 .xccheckoutarchivo; en general, los archivos xcshareddatadeben estar comprometidos.

Un .xccheckoutarchivo contiene metadatos sobre qué repositorios se utilizan en un espacio de trabajo. Para un solo proyecto en un único repositorio que no hace mucha diferencia. Pero si está utilizando un espacio de trabajo que tiene múltiples proyectos de diferentes repositorios, la presencia de un .xccheckoutarchivo en el espacio de trabajo le permite a Xcode saber cuáles son todos los componentes que componen un espacio de trabajo y dónde obtenerlos.

Chris Hanson
fuente
8
Si no estaba destinado a ser compartido, Apple lo almacenaría, por .xcuserdatalo que debería incluirse.
Joshcodes
44
Como dije en mi respuesta, el archivo xccheckout contiene información para todos los repositorios utilizados en un espacio de trabajo. Ese es el caso, independientemente del sistema SCM que utilicen : dicho espacio de trabajo puede estar en svn o git, y sus proyectos pueden estar en una mezcla de repositorios svn y git.
Chris Hanson el
72
Parece que xccheckout contiene claves y nombres que son específicos de la máquina de cada desarrollador ... Tan pronto como ejecuto xcode, cambia algunas claves en el archivo, y cambia algo llamado IDESourceControlWCCName de <string> OurCompanyAPI </string> a <string > our_company_api / string>: este último es el nombre que usé al clonar el repositorio. Si se supone que este archivo debe compartirse, Apple ha hecho un trabajo bastante pobre.
Herr Grumps
77
Cuando revisamos este archivo, todos mis compañeros de trabajo obtienen un IDESourceControlProjectIdentifier diferente ... por lo que nuestro .xccheckout se modifica con cada confirmación. -_-
Coeur
9
Independientemente de lo que Apple pretendía originalmente, los .xccheckoutarchivos están causando algunos problemas locos en Xcode 6 beta, y decidí eliminarlos de VCS. Parece estar relacionado con algún error de almacenamiento en caché, y creo que Xcode puede regenerarlos desde VCS automáticamente, para cada vez.
eonil
63

El *.xccheckoutarchivo contiene metadatos de VCS y, por lo tanto, no debe registrarse en el VCS.

Por otro lado: el registro en este archivo probablemente no creará dificultades de fusión u otros problemas.

Si desea ignorar este archivo (que recomiendo), debe agregar esta línea a su proyecto .gitignore:

*.xccheckout

La solución de Abizern no funcionará para proyectos dentro de un espacio de trabajo. Porque, cuando se utiliza un espacio de trabajo, la ruta de acceso al *.xccheckoutarchivo será: <workspace-name>.xcworkspace/xcshareddata/<workspace-name>.xcchekout. Y en realidad ignora más de lo que desearías.

Editar: Este archivo existe para administrar el conocimiento de Xcode de los posiblemente muchos sistemas VCS en su proyecto, vea la respuesta de Chris Hanson . Para> 99% de los proyectos, el archivo .xccheckout es una configuración exagerada.

Berik
fuente
1
Sería fantástico si pudiera ampliar esta afirmación "en realidad ignora más de lo que desearía". Específicamente, algunos ejemplos de otros archivos que entran en esa carpeta que deberían registrarse.
Mark Edington
Seguimiento: estoy usando un .gitignore de Adam de esta pregunta . Está disponible como una esencia y tiene alguna descripción del contenido de la carpeta xcshareddata.
Mark Edington
@ Mark : ignora el project.xcworkspace/. Eso podría estar bien por ahora, pero no contaría con eso para las nuevas versiones de Xcode.
Berik
66
Esta respuesta es incorrecta, y el estándar de GitHub .gitignoreque proporciona a los desarrolladores no debe especificar*.xccheckout
Chris Hanson el
2
Después de incluir este archivo en mis repositorios desde que se introdujo, recientemente comencé a eliminarlo de todos mis repositorios. Esto está creando conflictos de fusión todo el tiempo, principalmente en proyectos que incluyen mis propios marcos como submódulos. Y luego no obtengo nada de este archivo ya que uso git para la gestión de submódulos. Buen intento, Apple, gracias, pero no, gracias.
Pascal
38

Depende. El archivo contiene referencias al repositorio remoto que está utilizando. Si está utilizando un VCS centralizado como Perforce o Subversion, el repositorio remoto de todos será el mismo, por lo que puede y debe registrar el archivo.

Si está utilizando un VCS distribuido como Mercurial o git, pero lo está utilizando como si fuera un CVCS (en otras palabras, todos clonaron desde un repositorio compartido directamente a su espacio de trabajo personal en su máquina), entonces es posible que desee comprobarlo en.

Sin embargo, si está utilizando un DVCS con todos los que tienen su propio clon remoto, por ejemplo, usando GitHub en su patrón de uso estándar, NO desea registrar este archivo. Si lo hizo, sus Solicitudes de extracción solicitarán su configuración de repositorio para ser copiado en el archivo xccheckout de todos los demás, pero la configuración de su repositorio será diferente de la de los demás porque todos están utilizando repositorios remotos diferentes.

Tim Band
fuente
1
Esta respuesta me parece la mejor. Registrarlos estaba causando un chat innecesario en las diferencias para los compromisos de nuestro equipo. Agrego a .gitignore lo siguiente para mantenerlos fuera: * / .xcworkspace / xcshareddata / *. Xccheckout Todavía no entiendo por qué Apple eligió almacenar de forma redundante esta información que de todos modos está en la carpeta .git (mi única suposición es hacer que las cosas funcionen consistentemente en VCS)
Juan Carlos Méndez
20

Sí, el Project.xccheckoutarchivo debe estar comprometido con su repositorio. Xcode usa este archivo para indicar a los demás que abren el espacio de trabajo la lista completa de repositorios de control de origen utilizados por el espacio de trabajo y la ubicación de la copia de trabajo relativa al espacio de trabajo, si esos repositorios son Git, SVN o ambos.

Cuando abre el espacio de trabajo, Xcode usa el Project.xccheckoutarchivo para notificar al usuario que hay otros repositorios que forman parte del espacio de trabajo, y le pregunta cuál debe verificarse. Al retirar repositorios adicionales, Xcode coloca las copias de trabajo en la misma estructura de carpetas relativa al espacio de trabajo que tenían cuando Project.xccheckoutse generó el archivo.

Como dijo Chris Hanson , probablemente no importa para un repositorio único, un espacio de trabajo de un solo proyecto, pero para asuntos más complejos será realmente muy útil.

Puede encontrar más información sobre esto en el video de la sesión WWDC 2013 Comprensión del control de código fuente en Xcode ; la porción relevante comienza aproximadamente a los 15 minutos.

Calrion
fuente
Este archivo solo es útil si usa Xcode para SCM, de lo contrario, no necesita ese archivo en absoluto. Y aún menos si trabajas con git forks, en ese caso, la ruta del repositorio será única por desarrollador
Carlos Ricardo el
3

Esto es lo que tengo en mi .gitignore para Xcode.

#Xcode
*.xcuserstate
project.xcworkspace/
xcuserdata/

Mantiene todo lo que se relaciona con el estado local de la forma en que los proyectos me buscan fuera del repositorio.

El archivo xccheckout está aquí, por lo que no se rastrea en mi sistema de manera predeterminada.

Xcode ha mejorado y separa lo que debe compartirse y lo que debe mantenerse localmente. Por ejemplo; estas líneas ignorarán los esquemas de compilación predeterminados, lo cual está bien porque puede marcar esquemas de compilación específicos como compartidos, y se colocan en un directorio que no se ignora.

Los puntos de interrupción se ignoran, pero puede marcar puntos de interrupción específicos como compartidos entre proyectos y también se colocan en un directorio que no se ignora.

Abizern
fuente