Tengo dos proyectos SVN en uso desde otro repositorio SVN usando svn: externals .
¿Cómo puedo tener la misma estructura de diseño de repositorio en Git?
Tengo dos proyectos SVN en uso desde otro repositorio SVN usando svn: externals .
¿Cómo puedo tener la misma estructura de diseño de repositorio en Git?
git submodule
ahora puedo emularsvn:external
(desde marzo de 2013).Respuestas:
Git tiene dos enfoques similares, pero no exactamente equivalentes a svn: externos:
Las fusiones de subárbol insertan el código del proyecto externo en un subdirectorio separado dentro de su repositorio. Esto tiene un proceso detallado para configurar y luego es muy fácil para otros usuarios, ya que se incluye automáticamente cuando el depósito se extrae o se clona. Esta puede ser una forma conveniente de incluir una dependencia en su proyecto.
Es fácil extraer los cambios del otro proyecto, pero es complicado enviarlos nuevamente. Y si el otro proyecto tiene que fusionarse a partir de su código, los historiales del proyecto se fusionan y los dos proyectos se convierten efectivamente en uno.
Los submódulos de Git ( manual ) se vinculan a un commit particular en el repositorio de otro proyecto, al igual que svn: externos con un
-r
argumento. Los submódulos son fáciles de configurar, pero todos los usuarios tienen que administrar los submódulos, que no se incluyen automáticamente en los pagos (o clones).Aunque es fácil enviar cambios al otro proyecto, hacerlo puede causar problemas si el repositorio ha cambiado. Por lo tanto, generalmente no es apropiado enviar los cambios a un proyecto que está en desarrollo activo.
fuente
svn:externals
. Con la revisión 1.5, la sintaxis se cambió a un formato más flexible. Lo que se agregó fue el direccionamiento relativo de URL.Como mencioné en " Actualización de la nueva versión del submódulo Git ", puede lograr la misma función externa SVN con los submódulos Git 1.8.2:
Esto es suficiente para que un submódulo siga una bifurcación (como en el ÚLTIMO compromiso de una bifurcación remota de un repositorio ascendente de submódulo ). Todo lo que necesitas hacer es:
Eso actualizará el submódulo.
Más detalles están en "
git submodule
seguimiento más reciente ".Para convertir un submódulo existente en uno que rastrea una rama : consulte todos los pasos en " Submódulos Git: especifique una rama / etiqueta ".
fuente
svn:externals
?--depth
pero en realidad no aborda el problema.Tengo una solución alternativa para el problema: herramienta gil (git links)
Permite describir y administrar dependencias complejas de repositorios git.
También proporciona una solución al problema de dependencia de submódulos recursivos git .
Considere que tiene las siguientes dependencias del proyecto: ejemplo de gráfico de dependencia del repositorio git
Luego puede definir el
.gitlinks
archivo con la descripción de la relación de repositorios:Cada línea describe el enlace git en el siguiente formato:
Finalmente, debe actualizar su repositorio de muestras raíz:
Como resultado, clonarás todos los proyectos necesarios y los vincularás entre sí de la manera adecuada.
Si desea confirmar todos los cambios en algún repositorio con todos los cambios en los repositorios vinculados secundarios, puede hacerlo con un solo comando:
Los comandos pull, push funcionan de manera similar:
La herramienta Gil (enlaces git) admite los siguientes comandos:
Más información sobre el problema de dependencia de submódulos recursivos git .
fuente
gil
.