2010-07-25 13 views
17

Lo sé, en la época de Maven no se recomienda almacenar bibliotecas en VCS, pero a veces tiene sentido.Mejor práctica para almacenar archivos .jar en VCS (SVN, Git, ...)

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 los más nuevos, entonces tal vez la diferencia almacenada entre dos archivos .jar sin comprimir sea mucho menor que la diferencia de los comprimidos. ¿Alguien hizo algunas pruebas?

Respuesta

21

Mejor práctica 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 cualquiera que sea su tamaño.

No lo hace en un DVCS, especialmente uno como Git (y its limits):

  • archivos binarios don't fit well with VCS.
  • De forma predeterminada, la clonación de un repositorio de DVCS obtendrá todos los de 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.
    Puedes intentar jugar con shallow cloning, pero eso es muy poco práctico.

utilizar un segundo repositorio, como Nexus, para el almacenamiento de esos frascos, y sólo hacen referencia a un archivo txt (o un archivo pom.xml para Maven proyecto) con el fin de buscar a los jar versiones correctas.
Un repositorio de artefactos está más adaptado para distribution and release management purpose.


dicho todo esto, si necesidad tarro de almacenar en un repositorio git, tendría que recomendar inicialmente para guardarlos en su formato comprimido (que es el formato por defecto para un tarro: ver Creating a JAR File)
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 el proceso de compra tomarían menos tiempo.

Sin embargo, muchos hilos menciona la posibilidad de store jar in uncompressed format:

estoy usando algunos repos que se interponen bolas de alquitrán 50MB regulares controladas en ellos.
Los convencí de no comprimir los archivos tar, y git hace un trabajo bastante decente al hacer la compresión delta entre ellos (aunque necesita bastante RAM para hacerlo).

Tienes más en deltified object on Git here:

  • No hace una diferencia si se trata de texto o binario;
  • 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 utiliza un objeto almacenado en la representación deltificada, tendría un costo mayor que usar el mismo objeto en la representación base comprimida. El mecanismo de desvinculación hace que la compensación tome en cuenta este costo, así como la eficiencia del espacio.

lo tanto, si los clones y las cajas son operaciones no comunes que se tendría que realizar cada 5 minutos, el almacenamiento frasco en un formato no comprimido en Git tendría más sentido porque:

  • Git haría delta comprimido/computar para esos archivos
  • Usted terminaría con jar sin comprimir en su directorio de trabajo, frascos que luego podrían cargarse más rápidamente.

Recomendación: descomprimido.

+0

Gracias por responder, aunque esto no responde mi pregunta. A veces tiene sentido (para nosotros) almacenar archivos jar en un repositorio. Para ese caso, quiero saber qué es lo mejor: comprimir o descomprimir. – Mot

+0

@mklhmnn: de acuerdo, he agregado mi recomendación, al menos para Git: vale la pena probar el formato sin comprimir para jar. – VonC

+1

"formato sin comprimir ... vale la pena intentarlo" contra "Yo ... recomiendo almacenar ... en ... formato comprimido" parece contradictorio para mí. ¿Sugiere comprimido o sin comprimir? – Mot

2

.jar archivos ya se pueden (pueden) comprimirse, comprimirlos una segunda vez probablemente no proporcionen la mejora de tamaño que espera.

+2

No fue mi intención comprimirlos por segunda vez, sino crearlos comprimidos o sin comprimir. – Mot

+1

@mklhmnn, si almacena '.jar's, los mantendría en su formato de distribución original. Jar generado a partir de la fuente en su repositorio no lo agregaría al repositorio. – rsp

+1

JAR usa formato ZIP, por lo que siempre está comprimido. –

Cuestiones relacionadas