with tmatesoft org migrar kit examples branches java svn git

java - tmatesoft - Práctica recomendada para almacenar archivos.jar en VCS(SVN, Git,...)



svn kit eclipse (3)

Práctica recomendada para almacenar archivos .jar en VCS (SVN, Git, ...): no.

Podría tener sentido en un CVCS (VCS centralizado) como SVN, que puede manejar millones de archivos independientemente de su tamaño.

No lo hace en un DVCS, especialmente uno como Git (y sus límites ):

  • Los archivos binarios no encajan bien con VCS .
  • De forma predeterminada, la clonación de un repositorio de DVCS le proporcionará todo su historial, con todas las versiones de jar.
    Eso será lento y ocupará mucho espacio en el disco, sin importar qué tan bien estén comprimidos esos archivos jar.
    Puedes intentar jugar con clonación superficial , pero eso es muy poco práctico.

Use un segundo repositorio, como Nexus , para almacenar esos archivos jar, y solo haga referencia a un archivo txt (o un archivo pom.xml para el proyecto Maven ) para obtener las versiones correctas del archivo jar.
Un repo de artefactos es más adecuado para fines de distribución y administración de lanzamientos .

Dicho todo esto, si debe almacenar el archivo jar en un repositorio de Git, le recomendaría inicialmente que los almacene en su formato comprimido (que es el formato predeterminado para un archivo jar: consulte Creación de un archivo JAR )
Tanto el formato comprimido como el no comprimido serían tratados como binarios por Git, pero al menos, en un formato comprimido, la clonación y la extracción llevaría menos tiempo.

Sin embargo, muchos hilos mencionan la posibilidad de almacenar jar en formato no comprimido :

Estoy usando algunos repositorios que obtienen cheballs regulares de 50MB.
Los convencí de no comprimir los archivos comprimidos, y git hace un trabajo bastante decente de hacer una compresión delta entre ellos (aunque necesita bastante RAM para hacerlo).

Tienes más sobre el objeto deltificado en Git aquí :

  • No hace una diferencia si está tratando con binario o texto;
  • El delta no está necesariamente en contra de la misma ruta en la revisión anterior, por lo que incluso un nuevo archivo agregado al historial se puede almacenar en una forma delitificada;
  • Cuando se usa un objeto almacenado en la representación deltificada, incurriría en un costo mayor que usar el mismo objeto en la representación base comprimida. El mecanismo de deltificación hace una compensación teniendo en cuenta este costo, así como la eficiencia del espacio.

Por lo tanto, si los clones y los registros no son operaciones comunes que tendrías que realizar cada 5 minutos, el almacenamiento de jar en un formato sin comprimir en Git tendría más sentido porque:

  • Git comprimiría / calcularía delta para esos archivos
  • Acabarías con un jar sin comprimir en tu directorio de trabajo, los tarros que potencialmente podrían cargarse más rápidamente.

Recomendación: sin comprimir .

Lo sé, en la época de Maven no se recomienda almacenar bibliotecas en VCS, pero a veces tiene sentido, sin embargo.

Mi pregunta es cómo almacenarlos mejor: ¿comprimidos o sin comprimir? Sin comprimir, son más grandes, pero si se reemplazan un par de veces con otras más nuevas, tal vez la diferencia almacenada entre dos archivos .jar sin comprimir podría ser mucho menor que la de los comprimidos. ¿Alguien hizo algunas pruebas?



.jar archivos .jar están (pueden ser) comprimidos, comprimirlos por segunda vez probablemente no producirán la mejora de tamaño que espera.