Después de clonar un repositorio remoto, no muestra ninguna rama remota mediante la opción -a. ¿Cual podría ser el problema? ¿Cómo depurarlo? En este fragmento no se muestran dos de las ramas remotas:
$ 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
Probé 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 volver a intentarlo en esta máquina, pero sería mejor saber qué está mal.
Cualquier sugerencia o sugerencia será más que bienvenida.
Editar: Resumen de la respuesta: desde la versión 1.8.3.2 de git, es necesario usar "--depth" y "--no-single-branch" juntos para obtener el mismo comportamiento que antes. Esto se considera una corrección de errores.
git
branch
shallow-clone
minghua
fuente
fuente
master
es su sucursal local.remotes/origin/master
es la rama remota correspondiente. Cuál es exactamente la pregunta?git branch -avv
git clone --depth=1 --no-single-branch
, esto es lo que necesito en la mayoría de los casos.Respuestas:
El comportamiento es correcto, después de la última revisión, la rama maestra es (ya que esta es la HEAD del control remoto primario) la única rama remota en el repositorio:
El clon completo ofrece nuevas (todas) ramas:
Clones superficiales
Debido a la descripción superficial en la documentación técnica, un "
git-clone --depth 20 repo
[...] resultado [s en] cadenas de compromiso con una longitud máxima de 20." Por lo tanto, un clon superficial debe contener la profundidad solicitada de confirmaciones, desde la punta de una rama.Como, además, la documentación de
git clone
la--single-branch
opción-describe:Por lo tanto un poco profunda clon ( con la profundidad -option) sólo se obtiene solamente una sola rama (a su profundidad requerida).
Desafortunadamente, ambas opciones (
--depth
y--single-branch
) han tenido fallas en el pasado y el uso de clones superficiales implica problemas no resueltos (como puede leer en el enlace que publiqué arriba), que es causado por la reescritura del historial dada. En general, esto conduce a un comportamiento algo complicado en casos especiales.fuente
fetch = +refs/heads/*:refs/remotes/origin/*
, y ejecutándosegit fetch --depth 1
(sin--tags
). También podemos agregar etiquetas específicas para ser recuperadas, usando config comofetch = +refs/tags/v2.0.0:refs/tags/v2.0.0
.Después de hacer un clon superficial, para poder verificar otras ramas desde el control remoto ,
Ejecutar (gracias @jthill):
Después de eso, haz un
git fetch -v
Finalmente
git checkout the-branch-i-ve-been-looking-for
El paso 1 también se puede realizar manualmente editando
.git/config
.Por ejemplo, cambie la siguiente línea de:
para (reemplazar
master
con*
):fuente
git remote set-branches origin '*'
para todas las ramas, reemplace el*
con un nombre de rama para uno.-vvv
significa engit fetch -vvv
? No encuentro ninguna información al respecto en git-fetch docverbosity
odebug
degit
. No es porfetch
método.Después de leer las respuestas y el comentario de @jthill, lo que mejor me funcionó fue usar la
set-branches
opción en elgit remote
comando:Esto cambia la lista de ramas rastreadas por el control remoto nombrado para que podamos buscar y pagar solo la rama requerida.
fuente
git remote set-branches --add origin 'remote_branch_name'
para que la nueva rama sea adicional a las existentes, en lugar de reemplazarlas en la lista de ramas del control remoto (o patrones de rama) para buscar en el archivo .git / config.'
es importante engit remote set-branches --add origin 'remote_branch_name'