Quiero rastrear un proyecto que usa git. No quiero clonar el repositorio completo y el historial completo, solo quiero la última revisión y quiero poder actualizar a nuevas revisiones desde el proyecto remoto.
Intenté usar git clone, pero esto crea una copia de todo el repositorio (tamaño de archivo enorme), y el seguimiento de los cambios hace que el espacio en disco sea aún más grande (100 mb de archivos ahora ocupan más de 2 gb).
No voy a enviar parches y no necesito el historial. Solo quiero la última versión como en subversion.
¿Es esto posible en git?

greg hewgill
Utilizar git clone
con el --depth
opción establecida en 1
para crear un clon superficial con un historial truncado a la última confirmación.
Por ejemplo:
git clone --depth 1 https://github.com/user/repo.git
Para inicializar y actualizar también cualquier submódulo anidado, también pase --recurse-submodules
y para clonarlos superficialmente, también pase --shallow-submodules
.
Por ejemplo:
git clone --depth 1 --recurse-submodules --shallow-submodules https://github.com/user/repo.git
Solución alternativa para hacer un clon superficial (git clone --depth=1 <URL>
) sería, si el lado remoto lo admite, usar --remote
opción de archivo git:
$ git archive --format=tar --remote=<repository URL> HEAD | tar xf -
O, si el repositorio remoto en cuestión es navegable usando algún interfaz web como gitweb o GitHub, entonces existe la posibilidad de que tenga la función de ‘instantánea’, y puede descargar la última versión (sin información de versión) desde la interfaz web.
Estos días, se recomienda contra los clones superficiales en la mayoría de los casos.
Mientras que, para el caso de uso que mencionas (descarga la última versión y nunca más la toques), git clone --depth=1
funciona, en el caso más general, puede crear problemas. Por ejemplo, si desea mantener su clon actualizado con upstream, git fetch
es mucho más caro en un clon poco profundo.
Si lo que quieres es descargar menos datos, los clones parciales son mejores para el caso general:
git clone --filter=tree:0 <url>
Esto seguirá descargando el historial de confirmaciones, pero no descargará los árboles de archivos ni el contenido de los archivos de confirmaciones anteriores. Las recuperaciones de confirmaciones ascendentes seguirán siendo baratas.
Git 1.9/2.0 (Q1 2014) será mucho más eficiente con clonación superficial: stackoverflow.com/a/21217267/6309 y stackoverflow.com/a/21217326/6309
– VoC
19 de enero de 2014 a las 13:28