2010-01-26 13 views
190

Me gustaría crear un repositorio que recoja un repositorio remoto.¿Cómo configurar un proyecto de git para utilizar un submódulo de repositorio externo?

Por ejemplo, digamos que jQuery como un submódulo:

git://github.com/jquery/jquery.git 

¿Cuál sería el proceso de creación de un acuerdo de recompra con jQuery como un sub-módulo y la adición de mi propio externa como un acuerdo de recompra a distancia.

También una vez que esto esté configurado, si presiono/jale a mi propio control remoto, ¿permanecerá el exterior intacto?

+1

Cuando dice "tirar de" ¿Estás diciendo que desea que la cesión temporal de jQuery para ser un submódulo de su propio repo? – ezod

+0

Sí exactamente, lo siento si eso no está claro. Me gustaría saber cómo configuré esto como un dispositivo externo mientras empujaba y extraía los cambios en mi propio control remoto. – Tom

+0

Consulte el [Tutorial de Git Submódulos] (https://git.wiki.kernel.org/index.php/GitSubmoduleTutorial) en la wiki de git. –

Respuesta

309
  1. Tiene un proyecto - llamarlo MyWebApp que ya tiene un acuerdo de recompra github
  2. Usted desea utilizar el repositorio jquery en su proyecto
  3. Desea extraer el repositorio jquery en su proyecto como un submódulo.

Los submódulos son realmente muy fáciles de referenciar y usar. Asumiendo que ya tiene MyWebApp configurado como un acuerdo de recompra, de la edición terminal de estos comandos:

cd MyWebApp 
git submodule add git://github.com/jquery/jquery.git externals/jquery 

Esto creará un directorio llamado externals/jquery * y vincularlo con el repositorio GitHub jQuery. Ahora sólo tenemos que inicializar el submódulo y clonar el código para que:

git submodule update --init --recursive 

Ahora debería tener todo el último código clonado en el submódulo. Si el repositorio de jquery cambia y desea extraer el último código, simplemente emita el comando submodule update nuevamente. Tenga en cuenta que normalmente tengo varios repositorios externos en mis proyectos, por lo que siempre agrupo los repos en un directorio "externo".

El Pro Git Book en línea tiene buena información sobre los submódulos (y git en general) presentados en una forma fácil de leer. Alternativamente, git help submodule también dará buena información. O echa un vistazo al Git Submodule Tutorial en la wiki de git.

me di cuenta de esta entrada del blog que habla de submódulos y los compara a SVN de Subversion: mecanismo externo: http://speirs.org/blog/2009/5/11/understanding-git-submodules.html

* Como práctica, siempre se debe colocar sus submódulos en su propio directorio, como lo externo. Si no lo hace, su directorio de proyecto raíz puede llegar a ser muy abarrotado muy rápido.

+3

¡Gran explicación! :) Además, "submódulos de ayuda git" ayuda si quieres un poco más detalles, internos, etc. – WhyNotHugo

+0

@Hugo Buen punto. Agregué esa información a la respuesta. – memmons

+0

Solo para aclarar, si necesito jQuery en un proyecto que tengo en Github, ¿sería mejor agregar jQuery como submódulo? – aurbano

17

La mayoría de lo que necesita saber ya ha sido respondido, así que no me molestaré en abordarlo, sin embargo, he encontrado una pequeña información que por lo general falta.

Como sabe, "git pull" no actualizará los submódulos, y "git submodules update" tampoco descargará la última HEAD de esos submódulos.

Para actualizar todos los submódulos de su última revisión aguas arriba, puede utilizar

git submodule foreach git pull 

Si a menudo alterar sus submódulos, y tienen un montón de, a continuación, "git foreach" se convertirá en un valor incalculable.

0

Creo que la respuesta @Hugo podría ser lo que necesita y funciona bien. Así que he encontrado una manera más fácil.

git submodule update --remote 

Eso es todo.

lo tanto, un flujo de trabajo completo podrían ser:

git clone project-with-submodules 
git submodule init 
git config -l 
git submodule update --remote 
Cuestiones relacionadas