¿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=true
en 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 clone
directamente.fuente
git fetch --depth 1 origin d6be96bc...
espectáculosfatal: Couldn't find remote ref d6be96bc...
allowTipSHA1InWant
, pero niallowReachableSHA1InWant
tampocoallowAnySHA1InWant
.error: pathspec 'FETCH_HEAD' did not match any file(s) known to git
NOTA: 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:
.git
tamaño de directorio ( 267K vs 2.6M usando fullclone
):Me gustaría denotar,
--branch
puede 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
--branch
no 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:
--depth
implica--single-branch
.En lugar de clonar, use el comando fetch:
fuente
--depth
implica--single-branch
, por lo que podría eliminarlo en ese caso.git fetch
Realmente acepta un SHA1 pararefspec
?Intente usar
while
en 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