2011-06-04 12 views
16

Muchos proveedores de bibliotecas Objective-C (por ejemplo, facebook-ios-sdk) le instruyen que copie un cierto subconjunto de los archivos/directorios de su repositorio en su proyecto de Xcode. Un problema con esto es que no sabe qué revisión del código de proveedor tiene. Otra es que si realiza cambios en el código del proveedor, no es fácil contribuir con sus cambios a través de Git.¿Establece el submódulo de Git en clon superficial y extracción escasa?

Como solución, quiero agregar cada biblioteca de proveedor como un submódulo de Git del repositorio de mi proyecto con algunas configuraciones adicionales (por ejemplo, en el archivo .gitmodules). De esta manera, si otra persona clona mi proyecto y hace git submodule update --init, su cesión temporal & submódulos tendrá el mismo estado que la mía, ya que va a utilizar la misma configuración predeterminada que puse:

  1. la caja Escaso: Sólo echa un vistazo a cierta archivos del submódulo.
  2. Clon superficial: solo clone un cierto SHA1 del submódulo.

¿Cómo configuro los parámetros anteriores para un submódulo Git?

+0

No creo que puedas hacer eso, pero podrías cometer un script como este: http://stackoverflow.com/questions/2144406/git-shallow-submodules –

+0

Ten en cuenta que 'git submodule' ahora puede funcionar a ** actualización personalizada **: vea [mi respuesta a continuación] (http://stackoverflow.com/a/17693008/6309) – VonC

Respuesta

5

Los submódulos no pueden hacer parte de un repositorio. Debería verificar subtree merge en su lugar.

+2

Este comentario es sobre una versión anterior de git por lo que ya no es válida – Joakim

15

Puede hacer revisiones dispersas de submódulos de la misma manera que normal sparse checkout. Solo recuerde que el archivo sparse-checkout para cada módulo va en .git/modules/<mymodule>/info/. Pero, como se discutió en git 1.7 sparse checkout feature, los checkes dispersos son exactamente eso: checkouts. No puede mover archivos ni compartir la configuración.

+0

+1 para un buena solución (gracias @takoi). Cree un submódulo y luego filtre los archivos/directorios que aparecen en el árbol de trabajo utilizando la característica de extracción dispersa. Hay una forma simple de cómo realizar el pago de Sparse en http://blog.quilitz.de/2010/03/checkout-sub-directories-in-git-sparse-checkouts – johnhunter

+2

@johnhunter El enlace está muerto –

+0

@ void.pointer link works ok ahora – johnhunter

10

Con git1.8.4 (July 2013), en addition git shallow update for submodule (git submodule update --depth 1), ahora puede tener una actualización encargo:

Además de la elección de "rebase, fusionar, o checkout-detach", "actualización submódulo" puede permitir que se use un comando personalizado para actualizar el árbol de trabajo de los submódulos a través de la variable de configuración "submodule.*.update".

Ver commit 6cb5728c43f34a7348e128b44b80d00b9417cb19:

Los usuarios pueden configurar submodule.$name.update a '!command' que hará 'command' para ejecutarse en lugar de la caja/fusionar/rebase.
Esto permite al usuario un control más detallado sobre cómo se realiza la actualización.

Signed-off-by Chris Packham <[email protected]>

Esto significa que puede versión de un 'command', que luego se puede utilizar para cualquier actualización submódulo (a través de la configuración submodule.$name.update).
Esa secuencia de comandos puede hacer una salida dispersa si lo desea.


Actualización Agosto 2016 (3 años más tarde)

Con Git 2.10 (Q3 2016), que será capaz de hacer

git config -f .gitmodules submodule.<name>.shallow bool 

Ver "Git submodule without extra weight" por más.

+0

VonC, pero, ¿qué comando sugieres para hacer el análisis disperso? No tengo idea de que es eso. –

+0

@ThomasVanderStichele una secuencia de comandos que realizaría una salida dispersa, similar a esta: http://stackoverflow.com/a/2340860/6309 – VonC

+0

'! Command' ya no funciona:" Tenga en cuenta que el formulario de comando! Se ignora intencionalmente aquí por razones de seguridad. " – saji

Cuestiones relacionadas