¿Cómo configurar un proyecto de git para utilizar un submodule de repository externo?

Me gustaría crear un repository que atraiga un repository remoto.

Por ejemplo, supongamos que jQuery es un submodule:

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

¿Cuál sería el process de crear un repository con jQuery como un submodule y agregar mi propio externo como un repository remoto?

Además, una vez que esto esté configurado, si presiono / tiro a mi propio control remoto, ¿permanecerá el externo intacto?

  1. Tienes un proyecto: llámalo MyWebApp que ya tiene un repository github
  2. Desea usar el repository de jquery en su proyecto
  3. Desea include el repository de jquery en su proyecto como un submodule .

Los submodules son realmente fáciles de referencer y usar. Asumiendo que ya tienes MyWebApp configurado como un repository, desde el terminal emite estos commands:

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

Esto creará un directory llamado externals/jquery * y lo vinculará al repository de github jquery. Ahora solo tenemos que iniciar el submodule y clonar el código:

 git submodule update --init --recursive 

Ahora debería tener todo el último código clonado en el submodule. Si el repository de jquery cambia y desea extraer el último código, simplemente emita nuevamente el command de submodule update del submodule update . Tenga en count que normalmente tengo varios repositorys externos en mis proyectos, por lo que siempre agrupo los repos en un directory "externo".

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

Observé esta input de blog que habla de submodules y los compara con el mecanismo svn: external de Subversion: http://speirs.org/blog/2009/5/11/understanding-git-submodules.html

* Como práctica recomendada, siempre debe colocar sus submodules en su propio directory, como Externals. Si no lo hace, su directory de proyecto raíz puede llegar a ser muy abarrotado muy rápido.

La mayoría de lo que necesita saber ya ha sido respondido, por lo 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 submodules, y "git submodules update" tampoco downloadá la última HEAD de esos submodules.

Para actualizar todos sus submodules a su última revisión en sentido ascendente, puede usar

 git submodule foreach git pull 

Si a menudo altera sus submodules y tiene muchos de ellos, entonces "git foreach" será invaluable.

Al final encontré que http://github.com/evilchelu/braid parecía encajar con la forma en que esperaba que funcionaran los submodules y los controles remotos

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

 git submodule update --remote 

Eso es todo.

Entonces, un flujo de trabajo completo podría ser:

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