Obteniendo una sola revisión de Git

14

Tener el historial completo de revisión de Git tiene muchos beneficios como parte del proceso de desarrollo.

Pero nuestro producto es el código fuente, estamos utilizando lenguajes con secuencias de comandos que no necesitan compilación o procesamiento, y luego el historial de Git se convierte en una carga para la implementación; en nuestro ejemplo, implementamos un entorno virtual limpio después de cada cambio, con varias implementaciones en Una sola máquina.

Hay algunas maneras de reducir la cantidad de historial, por ejemplo, clones poco profundos cuya eficiencia depende de qué tan profunda sea la revisión en la rama, haciendo una búsqueda en lugar de clonar, pero luego obtienes el historial de la revisión y viceversa, o obteniendo el total repo una vez y luego tire cuando sea necesario, pero esto es un desperdicio en términos de espacio en disco y tiende a ser menos confiable.

¿Hay alguna manera de obtener una única revisión de Git sin su historial?

Rsf
fuente
1
Preguntas y respuestas relacionadas en SO stackoverflow.com/questions/26135216/…
Evgeny

Respuestas:

16

Clon superficial

De hecho, puedes obtener un clon superficial de Git usando:

git clone --depth=1 <url>

Esto seguirá clonando el repositorio y creará una .gitcarpeta con los objetos, solo de menor tamaño (la diferencia depende del tamaño total del archivo en comparación con el tamaño del historial).

Archivo Git

También puede usar git-archive para extraer un archivo del repositorio:

Crea un archivo con el formato especificado que contiene la estructura de árbol para el árbol con nombre y lo escribe en la salida estándar. Si se especifica, se antepone a los nombres de archivo en el archivo.

En los ejemplos que muestra, por ejemplo:

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz

Cree un tarball comprimido para la versión .

Hosted Git, API de archivo

Si aloja su repositorio en GitHub, puede usar su API de archivo :

https://api.github.com/repos/<username>/<repository>/zipball/<commit_hash>

Bitbucket.org tiene una misma funcionalidad para esto:

https://bitbucket.org/<username>/<repository>/get/<branch_name|commit_hash|tag>.zip

7ochem
fuente
7ochem, tal vez el comando gzip debe ser gzip -c ....
Romeo Ninov
11

No despliegue su repositorio git. Desarrollar una metodología de despliegue real. Incluso si es tan simple como armar un archivo (= construir un artefacto con solo los archivos necesarios para ser implementados) de los scripts implementados.

Incluso si clona superficialmente la punta de su repositorio de origen, es probable que no necesite pruebas unitarias, documentación, perfiles de revestimiento y otras efímeras de soporte en su entorno implementado.

Nota : para los repositorios de lenguajes con script que realmente no tienen un paso de "compilación", una forma trivial de liberar un artefacto sería empaquetarlos en un archivo, como tar o rpm. Luego, para "desplegar", descomprime el archivo o instala las rpm. esto elimina la necesidad de herramientas git en su cadena de implementación (no todos los servidores prod tendrán esas herramientas de desarrollo).

Ruby Martes DONO
fuente
está bien cuestionar (¡o incluso cuestionar!) una respuesta: eso es lo que hace que Stack Exchange sea genial :) para repositorios de lenguajes con script que realmente no tienen un paso de "compilación", una forma trivial de liberar un artefacto sería empaquetar ellos en un archivo, como tar o rpm. luego, para "desplegar", descomprime el archivo o instala las rpm. esto elimina la necesidad de herramientas git en su cadena de implementación (no todos los servidores prod tendrán esas herramientas de desarrollo)
RubyTuesdayDONO
1
@ Pierre.Vriens, sí, te estás perdiendo lo que se sugiere como crear un archivo, es decir, construir un artefacto con solo los archivos necesarios para desplegarlo. Dicho esto, estoy de acuerdo en que no es una respuesta de calidad y este punto debería extenderse. Estamos en beta privada y las respuestas deben ser explícitas
Tensibai
Entonces no veo lo que esto trae más que la respuesta aceptada, si es para apuntar hacia el archivo adecuado ... es simplemente redundante, debe editar para extender de esta manera iMHo
Tensibai
1
Por favor revise mi edición de su respuesta (solo integró su comentario interesante). Por supuesto, siéntase libre de mejorar / reelaborar, o simplemente retroceder si no le gusta mi edición. Por cierto: su comentario (= nota que agregué) me hizo pensar como "realmente, así de simple? Una vez más una muestra de cómo hacemos las cosas en zOS ... con z para cero tiempo de inactividad ...". Creo que es hora de comenzar a cuestionar muchas más preguntas / respuestas a través de comentarios similares ... No me desafíen demasiado ...
Pierre.Vriens
No pretendo que esta sea una respuesta completa o modelo, pero no vi a nadie más dirigiéndose al elefante en la sala: si usa git para "desplegar" su proyecto, "lo pasará mal" ;)
RubyTuesdayDONO
6

Pregunta, ¿hay alguna manera de obtener una única revisión de Git sin su historial?

Para obtener un repositorio, no, no hay manera, principalmente porque no hay 'revisión'. Git store commits, que son cambios del estado anterior
Si desea su repositorio en un punto específico en el tiempo, debe retirar el compromiso en este momento y todos sus ancestros o solo obtendrá los cambios realizados en el compromiso.

Para evitar confusiones: la clonación superficial obtiene el historial necesario y luego lo trunca al espacio libre, el árbol todavía está hecho de la historia.

Para las soluciones, @ 7ochem answer sí las cubre.

Tensibai
fuente