Submodule Git para Linux y Windows

Al usar el git submodule en Linux, podría tener un .gitmodules con uno o más subsistemas extraídos de, por ejemplo, /mnt/gitrepos/subsystem1.git (acceso basado en files centrales).

 [submodule "subsystem1"] path = subsystem11 url = /mnt/gitrepos/subsystem1.git/ 

Me gustaría apoyar también a un usuario de Windows que puede acceder al mismo repository de module desde H:/gitrepos/subsystem1.git/ .

Es, por ejemplo, un recurso compartido de Samba de Linux de /mnt/gitrepos/ como el gitrepos compartido gitrepos .

¿Hay alguna manera de que Git pueda manejar la línea de URL según el sistema operativo? Para Windows, los .gitmodules serían

 [submodule "subsystem1"] path = subsystem11 url = H:/gitrepos/subsystem1.git/ 

Por lo tanto, me gustaría "algo así como" este código genérico para .gitmodules (syntax especulativa):

 [submodule "subsystem1"] path = subsystem11 if Linux url = /mnt/gitrepos/subsystem1.git/ else url = H:/gitrepos/subsystem1.git/ 

No. Los submodules generalmente están diseñados para una URL de repository que funciona en todas partes, generalmente en networking (por ejemplo, git://host/path ). No hay ningún mecanismo para proporcionar múltiples URL diferentes para un repository.

Dicho esto, Git te permite personalizar la URL de un submodule. Cuando se inicializan los submodules ( git submodule init ), la URL de .gitmodules se copy a su file .git/config . Ahora puede editar las URL allí antes de ejecutar la git submodule update .

Una solución que he considerado (pero no intenté) es inicializar la base de código del submodule ("subsystem1.git" en su ejemplo) como un repository local e independiente. Agregue un "control remoto" en el submodule que apunta a la versión local independiente del repository. También agregue un "control remoto" en la versión que no sea de submodule (indepent, local) de su repository de subsistema que apunta a la versión del submodule. Entonces debería poder usar Samba / Windows / Linux para actualizar la versión independiente (no submodule) de subsystem1.git, y luego "git fetch independent" desde el submodule para copyr el código del repository no submodule al repository de submodules.

Al final, la estructura de su directory debería verse de la siguiente manera:

 /mnt/gitrepos/ /mnt/gitrepos/subsystem1.git/ /mnt/subsystem1.git/ 

Los controles remotos en cada uno de estos repositorys se verían así:

 /mnt/gitrepos/.git/config would have one remote block: [remote "origin"] (points to your main, non-local repository) /mnt/subsystem1.git/.git/config would have two remote blocks: [remote "origin"] (points to your main, non-local repository) [remote "local_origin"] (points to /mnt/gitrepos/subsystem1.git) /mnt/gitrepos/.git/modules/subsystem1.git/config would also have two remote blocks: [remote "origin"] (points to your main, non-local repository) [remote "independent"] (points to /mnt/subsystem1.git) 

Sincronizar el código de su submodule con lo que está en el server remoto se convierte en un process de varios pasos, ya que debe usar el repository "independiente" como un repository intermedio / área de preparación.

Su millaje puede variar … Esto es algo que parece que debería funcionar, no algo que haya intentado.