Red de conocimiento informático - Material del sitio web - Cómo usar JGit para administrar submódulos de Git

Cómo usar JGit para administrar submódulos de Git

Para un proyecto Git más grande, es posible que desees compartir código entre varios repositorios, ya sea una biblioteca compartida para proyectos utilizados en varios productos o algunas plantillas. Git implementa esto a través de submódulos. Los submódulos permiten colocar clones de otras bases de código como subdirectorios en una base de código principal (a veces denominada proyecto principal). Un submódulo también es un repositorio independiente. Puede confirmar, bifurcar, rebase, etc. como otros repositorios.

JGit proporciona API que implementan la mayoría de los comandos del submódulo de Git, que les presentaré aquí.

Configuración

Los fragmentos de código utilizados en este artículo se utilizarán como un programa de prueba de aprendizaje. Los programas de prueba simples ayudan a comprender cómo funcionan las bibliotecas de terceros y cómo utilizar nuevas API. Puede considerar estas pruebas como experimentos controlados que le ayudarán a obtener una comprensión más intuitiva del rendimiento de su código de terceros.

Además de esto, también puede ayudarte a comprobar nuevas versiones de código de terceros si continúas escribiendo pruebas. Si su programa de prueba cubre cómo llamar a estas bibliotecas, los cambios incompatibles en el código de terceros aparecerán temprano.

Volviendo al tema anterior, todos los programas de prueba *** comparten la misma configuración; consulte el código fuente para obtener más detalles. Ahora tiene una biblioteca vacía llamada padre y otra biblioteca llamada biblioteca que se agregará como un submódulo a la biblioteca principal del programa de prueba. Hay un método setUp en el programa de prueba, que se utiliza para crear estos dos repositorios, de la siguiente manera:

1

Git git = Git.init().setDirectory( "/ tmp/path/to/repo" ).call();

Estos dos repositorios están representados por variables Git de tipo principal y variables Git de tipo biblioteca, respectivamente. Esta clase encapsula un repositorio y permite el acceso a todos los comandos disponibles de JGit. Como mencioné antes, cada clase Commnad corresponde a un comando local de Git pocelain. Las instrucciones de llamada requieren el uso de un patrón generador. Por ejemplo, el resultado de ejecutar Git.commit() es efectivamente equivalente a un CommitCommand, y puedes llamar a su método call() con los parámetros necesarios para ejecutar el comando.

Agregar submódulo

El primer paso es, por supuesto, agregar un submódulo al repositorio existente. Con el paso de configuración anterior, el repositorio de la biblioteca debe agregarse como un submódulo al directorio de módulos/biblioteca del repositorio principal.

@Test

public void testAddSubmodule() lanza una excepción {

String uri

= biblioteca.getRepository().getDirectory() .setPath( "módulos/biblioteca" );

Repositorio = addCommand.call();

repository.close()

Archivo workDir = parent.getRepository().getWorkTree();

F?ile readme = new F?ile( workDir, "modules/library/readme.txt" );

F? ile gitmodules = new F?ile( workDir, ".gitmodules"

afirmarTrue( readme.isF?ile()

afirmarTrue( gitmodules.isF?ile()); );

}

El objeto SubmoduleAddCommand necesita saber dos cosas: primero, desde dónde se clonó el submódulo; segundo, dónde debe almacenarse. El atributo URI representa la dirección del repositorio clonado, que se pasará al comando de clonación. Después de ejecutar este comando, el directorio de trabajo del repositorio principal se verá así:

El repositorio de la biblioteca se almacena en el directorio módulos/biblioteca y su árbol de directorios de trabajo se ha extraído. El método call() devolverá un objeto de repositorio que puede utilizar como repositorio normal. Esto también significa que debe cerrar explícitamente el repositorio devuelto en su programa para evitar fugas de identificadores de archivos.

Como se muestra en la figura anterior, SubmoduleAddCommand solo hace una cosa: crear un archivo de módulo .git en el directorio de trabajo raíz del repositorio principal y agregarlo al índice.