¿Es posible clonar superficialmente una confirmación específica en un repositorio, es decir, con profundidad 1? Algo como
git clone http://myrepo.git 728a4d --depth 1
para obtener el estado del repositorio como está en el compromiso con SHA 728a4d...?
La motivación es evitar tener que clonar todo el repositorio y luego ver esa confirmación específica, cuando solo estamos interesados en el estado del repositorio en esa confirmación específica.
git
shallow-clone
Barbilla
fuente
fuente

Respuestas:
Comenzando con Git 2.5.0 (que debe estar disponible tanto en el lado del cliente como en el del servidor), puede configurar
uploadpack.allowReachableSHA1InWant=trueen el lado del servidor para habilitar la obtención de SHA1 específicos:Tenga en cuenta que no encontré una sintaxis para hacer esto
git clonedirectamente.fuente
git fetch --depth 1 origin d6be96bc...espectáculosfatal: Couldn't find remote ref d6be96bc...allowTipSHA1InWant, pero niallowReachableSHA1InWanttampocoallowAnySHA1InWant.error: pathspec 'FETCH_HEAD' did not match any file(s) known to gitNOTA: Mi ejemplo no ayuda a clonar mediante un hash de confirmación, pero ayudará a clonar una etiqueta y tener un repositorio ligero.
Si solo tiene que tener una confirmación en su "clon" y va a utilizar el hash de confirmación, la respuesta corta es NO .
Utilizo esta construcción de comandos (probada en v2.13.2.windows.1 ) para etiquetas:
Ejemplo completo:
.gittamaño de directorio ( 267K vs 2.6M usando fullclone):Me gustaría denotar,
--branchpuede tomar una etiqueta / rama.https://git-scm.com/docs/git-clone#git-clone---branchltnamegt
UPD
En pocas palabras, puede tomar "referencias". Puede leer más aquí: ¿Qué significa el mensaje de error de git "El servidor no permite la solicitud de un objeto no anunciado"?
Además, no hay trucos como:
Gracias @BenjiWiebe por señalarme mi error.
fuente
--branchno no apoyar las confirmaciones, sólo los nombres de rama ... esto no resuelve en absoluto. Como no es cierto.La respuesta inmediata es: no puedes.
¿Por qué? La explicación detallada se puede encontrar aquí: ¿Por qué no hay una opción de confirmación específica para clones de Git?
¿Qué más puedes hacer?
¿Cómo clonar el repositorio a una confirmación específica? (clon completo)
Más información:
¿Cómo clonar una sola rama?
git clone <url> --branch <branch_name> --single-branch <folder_name>¿Cómo clonar solo la última confirmación de una rama determinada?
git clone <url> --depth=1 --branch <branch_name> --single-branch <folder_name>¿Cómo clonar superficialmente un compromiso específico con profundidad 1?
Como comentó @sschuberth:
--depthimplica--single-branch.En lugar de clonar, use el comando fetch:
fuente
--depthimplica--single-branch, por lo que podría eliminarlo en ese caso.git fetchRealmente acepta un SHA1 pararefspec?Intente usar
whileen bash:Esto es bastante lento porque recupera cada confirmación individualmente; podría aumentar el incremento (para obtener confirmaciones en lotes y mejorar el rendimiento en una red) pero sigue siendo un enfoque de fuerza bruta.
fuente