¿Cuán dependiente estoy de los submodules de git?

Cuando uso la funcionalidad del git submodule , ¿qué tan dependiente estoy del propietario de ese repository?

Por ejemplo, yo uso git submodule add https://bitbucket.org/awesomecompany/repo.git

Todo es genial … Puedo clonar nuevas versiones, update e init los submodules, y everythign funciona como se espera.

Pero luego, un día triste, la "increíble compañía" decide eliminar su repository de bitbucket (o github). Ahora trato de clonar mi repository nuevamente, pero git no puede ubicar repo.git .

¿Estoy jodido?

¿Cómo debería haber configurado mi proyecto para que no confíe en su repository?

¿No estoy usando submodules correctamente?

¡Gracias!

  • Estás jodido si quieres clone tu repository. No se pierde si ya lo tiene en su repository local.
  • Bifurque su proyecto y actualícelo con frecuencia.
  • Es mejor evitar confiar en los proyectos de otras personas si son fundamentales para los suyos. El uso en sí mismo se ve bien para mí.

(Dicho esto, supongo que depender de grandes proyectos está bien, no desaparecerían de la noche a la mañana, supongo)

Si todavía tiene un clon local de su propio proyecto, contiene dos cosas:

  • Un file .gitmodules , rastreado en su propio repository, que contiene la URL canónica del submodule.

  • Un directory .git/modules/$subproject por subproyecto, que es un clon local del submodule remoto. Es Git, está distribuido, tienes una copy de todo el repository localmente.

Por lo tanto, en caso de que desaparezca https://bitbucket.org/awesomecompany/repo.git , aún puede usar su repository local del submodule. Puede insertlo en http://example.com/yourowncompany/yourownrepo.git , y dejar que .gitmodules apunte a http://example.com/yourowncompany/yourownrepo.git para versiones futuras, como si el proyecto del submodule acabara de moverse .

La buena noticia es que la URL del submodule no se almacena en el historial. El historial de Git tiene que ver con identificadores únicos (sha1sums) y no le importa dónde se aloja el código.

En cualquier caso, si el submodule es crítico para usted, debe mantener una copy respaldada de manera confiable para evitar tener que confiar en su .git/modules/$subproject repository de .git/modules/$subproject . Como señala la otra respuesta, si el submodule está alojado en un sitio que admite bifurcación del lado del server (bitbucket, github, gitlab, …), mantener una bifurcación es una forma de hacerlo.