2011-10-18 18 views
119

En mis scripts, a menudo uso bibliotecas (las mías u otras) que tienen sus propios repositorios. No quiero duplicar los que están en mi repositorio y no puedo actualizarlos cada vez que sale una nueva versión. Sin embargo, cuando alguien clona el repositorio, todavía debería funcionar localmente y no tener enlaces rotos.¿Cómo puedo haber vinculado las dependencias en un repositorio git?

¿Alguna idea sobre lo que podría hacer?

Respuesta

168

Puede hacerlo con submódulos en git. En su repositorio, hacer:

git submodule add path_to_repo path_where_you_want_it 

lo tanto, si el repositorio de la biblioteca tenía una URL de git://github.com/example/some_lib.git y que lo quería en lib/some_lib en su proyecto, que le escriba:

git submodule add git://github.com/example/some_lib.git lib/some_lib 

en cuenta que este necesidades para hacer desde el directorio de nivel superior en su repositorio. Entonces no lo haga cd en el directorio donde lo está poniendo primero.

Después de agregar un submódulo, o cada vez que alguien hace una copia nueva de su repositorio, usted tiene que hacer:

git submodule init 
git submodule update 

Y entonces todos los submódulos que ha añadido será comprobado a cabo al mismo revisión que tienes.

Cuando se desea actualizar a una nueva versión de una de las bibliotecas, cd en el submódulo y afloja:

cd lib/some_lib 
git pull 

Entonces, cuando se hace una git status debería ver lib/somelib enumerados en la sección modificada. Agrega ese archivo, confirma y estarás actualizado. Cuando un colaborador extraiga esa confirmación en su repositorio, verán lib/somelib como modificado hasta que vuelvan a ejecutar git submodule update.

+2

Gracias por su respuesta, votada! (y probablemente lo acepte mañana) ¿Hay alguna forma de agregar solo un archivo del otro repositorio como dependencia? ¿O tiene que ser una carpeta completa? –

+2

Si desea rastrearlo como un submódulo (y por lo tanto, ser capaz de obtener actualizaciones fácilmente) tendrá que extraer todo el repositorio. A diferencia de muchos otros VCS, git solo quiere tratar con el repositorio de nivel superior. – Emily

+3

[lea esto] (https://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/) para saber para qué sirve un submódulo y las formas de solucionarlo problemas potenciales. y [una discusión al respecto] (https://news.ycombinator.com/item?id=3904932). – minghua

Cuestiones relacionadas