traemos submodulos repositorio remoto los eliminar cómo crear comandos cambios git git-submodules multiple-repositories

repositorio - submodulos git



¿Cómo trabajo con un repositorio git dentro de otro repositorio? (4)

Considere usar un subtree lugar de submódulos, esto hará que la vida de los usuarios de repositorios sea mucho más fácil. Puede encontrar una guía más detallada en el libro Pro Git .

Tengo un repositorio de medios Git donde guardo todos mis archivos y scripts de JavaScript y CSS que usaré en varios proyectos.

Si creo un nuevo proyecto que está en su propio repositorio Git, ¿cómo uso los archivos JavaScript de mi repositorio de medios en mi nuevo proyecto de manera tal que no tenga que actualizar ambas copias del script cuando realice cambios ?


La clave son los submódulos git .

Comience a leer el capítulo de Submódulos del Libro de la Comunidad Git o del Manual del Usuario

Digamos que tienes el repositorio PROJECT1, PROJECT2 y MEDIA ...

cd /path/to/PROJECT1 git submodule add ssh://path.to.repo/MEDIA git commit -m "Added Media submodule"

Repetir en el otro repositorio ...

Ahora, lo bueno es que cada vez que confirme cambios en MEDIA, puede hacer esto:

cd /path/to/PROJECT2/MEDIA git pull cd .. git add MEDIA git commit -m "Upgraded media to version XYZ"

Esto acaba de registrar el hecho de que el submódulo MEDIA DENTRO DEL PROYECTO2 se encuentra ahora en la versión XYZ.

Te da el 100% de control sobre qué versión de MEDIA usa cada proyecto. Los submódulos de git son geniales, pero necesitas experimentar y aprender sobre ellos.

Con gran poder viene la gran oportunidad de ser mordido en la grupa.


Si entiendo bien tu problema quieres las siguientes cosas:

  1. Tenga sus archivos de medios almacenados en un solo repositorio de git, que es utilizado por muchos proyectos
  2. Si modifica un archivo de medios en cualquiera de los proyectos en su máquina local, debería aparecer inmediatamente en todos los demás proyectos (para que no quiera cometer + empujar + tirar todo el tiempo)

Desafortunadamente, no hay una solución definitiva para lo que deseas, pero hay algunas cosas por las cuales puedes hacer tu vida más fácil.

Primero debe decidir una cosa importante: ¿desea almacenar para cada versión en su repositorio de proyectos una referencia a la versión de los archivos de medios? Entonces, por ejemplo, si tiene un proyecto llamado example.com, ¿necesita saber qué style.css usó hace 2 semanas o el último siempre es (o casi siempre) el mejor?

Si no necesitas saber eso, la solución es fácil:

  1. crear un repositorio para los archivos de medios y uno para cada proyecto
  2. cree un enlace simbólico en sus proyectos que apunten al repositorio de medios clonado localmente. Puede crear un enlace simbólico relativo (p.ej. ../media) y asumir que todos verificarán el proyecto para que el directorio de medios esté en el mismo lugar, o escribirán el nombre del enlace simbólico en .gitignore, y todos podrán decidir Donde pone los archivos multimedia.

En la mayoría de los casos, sin embargo, desea conocer esta información de versión. En este caso tienes dos opciones:

  1. Almacena cada proyecto en un gran repositorio. La ventaja de esta solución es que solo tendrá 1 copia del repositorio de medios. La gran desventaja es que es mucho más difícil cambiar entre las versiones del proyecto (si realiza el pago de una versión diferente, siempre modificará TODOS los proyectos)

  2. Use submódulos (como se explica en la respuesta 1). De esta manera, almacenará los archivos de medios en un repositorio, y los proyectos contendrán solo una referencia a una versión de repositorio de medios específica. Pero de esta manera, normalmente tendrá muchas copias locales del repositorio de medios, y no podrá modificar fácilmente un archivo de medios en todos los proyectos.

Si yo fuera usted, probablemente elegiría la primera o la tercera solución (enlaces simbólicos o submódulos). Si elige usar submódulos, todavía puede hacer muchas cosas para hacer su vida más fácil:

  1. Antes de comprometerse, puede cambiar el nombre del directorio de submódulos y colocar un enlace simbólico a un directorio de medios común. Cuando esté listo para comprometerse, puede eliminar el enlace simbólico, eliminar el submódulo y luego confirmar.

  2. Puede agregar una de su copia del repositorio de medios como un repositorio remoto a todos sus proyectos.

Puede agregar directorios locales como un remoto de esta manera:

cd /my/project2/media git remote add project1 /my/project1/media

Si modifica un archivo en / my / project1 / media, puede enviarlo y extraerlo de / my / project2 / media sin enviarlo a un servidor remoto:

cd /my/project1/media git commit -a -m "message" cd /my/project2/media git pull project1 master

Usted es libre de eliminar estos compromisos más tarde (con git reset) porque no los ha compartido con otros usuarios.


Tuve problemas con subárboles y submódulos que las otras respuestas sugieren ... principalmente porque estoy usando SourceTree y parece bastante defectuoso.

En su lugar, terminé usando SymLinks y eso parece funcionar bien, así que lo estoy publicando aquí como una posible alternativa.

Hay una guía completa aquí: http://www.howtogeek.com/howto/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/

Pero, básicamente, solo necesita hacer mklink las dos rutas en un símbolo del sistema elevado. Asegúrate de usar el prefijo de enlace duro / J Algo en este sentido: mklink / JC: / projects / MainProject / plugins C: / projects / SomePlugin

También puede usar rutas de carpetas relativas y colocarlas en un bate para que cada persona las ejecute cuando verifique su proyecto por primera vez.

Ejemplo: mklink / J. / Assets / TaqtileTools .. / TaqtileHoloTools

Una vez que se haya vinculado la carpeta, es posible que deba ignorar la carpeta dentro de su repositorio principal a la que hace referencia. De lo contrario eres bueno para ir.

Nota : He eliminado mi respuesta duplicada de otra publicación, ya que esa publicación se marcó como una pregunta duplicada para esta.