Pregunta

¿Existe un sistema de control de versiones distribuido (git, bazaar, mercurial, darcs, etc.) que pueda manejar archivos de mayor tamaño que la RAM disponible?

Necesito poder enviar archivos binarios grandes (es decir,conjuntos de datos, vídeo/imágenes de origen, archivos), pero no necesito poder diferenciarlos, solo poder confirmarlos y luego actualizarlos cuando el archivo cambie.

La última vez que miré esto fue hace aproximadamente un año, y ninguno de los candidatos obvios lo permitió, ya que todos están diseñados para diferenciar la velocidad en la memoria.Eso me dejó con un VCS para administrar código y algo más (software de "administración de activos" o simplemente rsync y scripts) para archivos grandes, lo cual es bastante feo cuando las estructuras de directorios de los dos se superponen.

¿Fue útil?

Solución

Han pasado 3 años desde que hice esta pregunta, pero a partir de la versión 2.0 Mercurial incluye el extensión de archivos grandes, que logra lo que estaba buscando originalmente:

La extensión Largefiles permite rastrear archivos binarios grandes e incompresibles en Mercurial sin requerir un ancho de banda excesivo para clones y extracciones.Mercurial no realiza un seguimiento directo de los archivos agregados como archivos grandes;más bien, sus revisiones se identifican mediante una suma de verificación, y Mercurial rastrea estas sumas de verificación.De esta manera, cuando clona un repositorio o introduce conjuntos de cambios, los archivos grandes de las revisiones anteriores del repositorio no son necesarios y solo se descargan los necesarios para actualizar a la versión actual.Esto ahorra espacio en disco y ancho de banda.

Otros consejos

Ningún sistema de control de versiones distribuido gratuito admite esto.Si desea esta característica, tendrá que implementarla.

Puedes cancelar git:están interesados ​​en el rendimiento bruto para el caso de uso de desarrollo del kernel de Linux.Es improbable que alguna vez acepten la compensación de rendimiento al escalar a archivos binarios enormes.No sé acerca de Mercurial, pero parecen haber tomado decisiones similares a las de git al acoplar su modelo operativo a su modelo de almacenamiento para mejorar el rendimiento.

En principio, Bazaar debería poder respaldar su caso de uso con un complemento que implemente formatos de árbol/rama/repositorio cuya estrategia de implementación y almacenamiento en disco esté optimizada para su caso de uso.En caso de que la arquitectura interna lo bloquee y publique código útil, espero que los desarrolladores principales ayuden a arreglar la arquitectura interna.Además, puede establecer un contrato de desarrollo de funciones con Canonical.

Probablemente el enfoque más pragmático, independientemente del DVCS específico, sería construir un sistema híbrido:implemente un almacén de archivos enormes y almacene referencias a blobs en este almacén en el DVCS de su elección.

La divulgación completa:Soy un ex empleado de Canonical y trabajé en estrecha colaboración con los desarrolladores de Bazaar.

Sí, SCM de plástico.Se distribuye y gestiona archivos enormes en bloques de 4Mb por lo que no está limitado a tener que cargarlos íntegramente en la memoria en cualquier momento.Encuentre un tutorial sobre DVCS aquí:http://codicesoftware.blogspot.com/2010/03/distributed-development-for-windows.html

BUP podría ser lo que estás buscando.Fue creado como una extensión de la funcionalidad de git para realizar copias de seguridad, pero en realidad es lo mismo.Divide los archivos en fragmentos y utiliza un hash continuo para hacer que el contenido del archivo sea direccionable/almacenamiento eficiente.

Creo que sería ineficiente almacenar archivos binarios en cualquier forma de sistema de control de versiones.

La mejor idea sería almacenar archivos de texto de metadatos en el repositorio que hagan referencia a los objetos binarios.

¿Hay que distribuirlo?Supuestamente, el gran beneficio que tiene la subversión para los VCS distribuidos más nuevos es su capacidad superior para manejar archivos binarios.

Llegué a la conclusión de que la mejor solución en este caso sería utilizar ZFS.

Sí, ZFS no es un DVCS pero:

  • Puede asignar espacio para el repositorio mediante la creación de un nuevo FS
  • Puede realizar un seguimiento de los cambios creando instantáneas
  • Puede enviar instantáneas (confirmaciones) a otro conjunto de datos ZFS
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top