with usage tutorial specific name into from existing git branch shallow-clone

usage - git shallow clone(clon--depth) pierde ramas remotas



git clone usage (3)

Después de clonar un repositorio remoto, no muestra ninguna rama remota por una opción. ¿Cual podría ser el problema? Cómo depurarlo? En este fragmento, dos de las ramas remotas no se muestran:

$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git $ cd pythonwebkit $ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master $ git --version git version 1.8.3.1

Intentó el mismo comando en otra máquina, funciona bien:

$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git Receiving objects: 100% (186886/186886), 818.91 MiB | 3.44 MiB/s, done. $ cd pythonwebkit/ $ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/debian remotes/origin/master remotes/origin/python_codegen $ git --version git version 1.7.1

Intenté también clonar otro repositorio, funciona bien. Aunque puedo probarlo en esta máquina otra vez, pero sería mejor saber qué está mal.

Cualquier sugerencia o sugerencia será más que bienvenida.

Editar: Resumen de respuestas: desde la versión 1.8.3.2 de git, "--depth" y "--no-single-branch" deben usarse juntas para obtener el mismo comportamiento que antes. Esto se considera una solución de error.


Después de hacer un clon superficial, para poder consultar otras ramas desde remoto ,

  1. Ejecutar (gracias @jthill):

    git remote set-branches origin ''*''

  2. Después de eso, haz una git fetch -v

  3. Finalmente git checkout the-branch-i-ve-been-looking-for

El paso 1 también se puede hacer manualmente editando .git/config .

Por ejemplo, cambie la siguiente línea de:

fetch = +refs/heads/master:refs/remotes/origin/master

para (reemplazar master por * ):

fetch = +refs/heads/*:refs/remotes/origin/*


Después de leer las respuestas y el comentario de @jthill, lo mejor para mí fue usar la opción set-branches en el comando git remote :

$ git clone --depth 1 https://github.com/dogescript/dogescript.git $ git remote set-branches origin ''remote_branch_name'' $ git fetch --depth 1 origin remote_branch_name $ git checkout remote_branch_name

Esto cambia la lista de ramas rastreadas por el control remoto designado para que podamos buscar y extraer solo la rama requerida.


El comportamiento es correcto, después de la última revisión, la rama maestra es (ya que esta es la CABEZA del control remoto principal) la única rama remota en el repositorio:

florianb$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master

El clon completo ofrece nuevas (todas) las ramas:

florianb$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/debian remotes/origin/master remotes/origin/python_codegen

Clones superficiales

Debido a la shallow-description en la documentación técnica, un " git-clone --depth 20 repo [...] result [s in] comprometer cadenas con una longitud de como máximo 20". Por lo tanto, un clon superficial debe contener la profundidad de confirmaciones solicitada, desde la punta de una rama.

Como - además - la documentación de git clone para --single-branch -option describe:

"Clonar solo el historial que conduce a la punta de una sola rama, ya sea especificado por la opción --branch o por los puntos HEAD del remoto principal de la rama. Al crear un clon superficial con la opción --depth , este es el valor predeterminado, a menos que --no-single-branch se da para buscar los historiales cerca de las puntas de todas las ramas " .

Por lo tanto, un clon superficial ( con la opción de profundidad ) solo obtiene una sola rama (a la profundidad solicitada).

Desafortunadamente, ambas opciones ( --depth y --single-branch ) han sido defectuosas en el pasado y el uso de clones poco profundos implica problemas no resueltos (como puede leer en el enlace que publiqué arriba), que es causado por la historia dada- volver a escribir. Esto conduce en general a un comportamiento algo complicado en casos especiales.