git shallow clone (clone depth depth) pierde ramas remotas
Después de clonar un repositorio remoto no muestra ninguna rama remota por-a opción. ¿Cuál podría ser el problema? Cómo depurar? 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 intentarlo en esta máquina de nuevo, pero sería mejor saber qué está mal.
Cualquier sugerencia o sugerencia será más que bienvenida.
Edit: Answer summary: Desde la versión 1.8.3.2 de git, "depth depth" y "no no-single-branch" deben usarse juntos para obtener el mismo comportamiento que antes. Esto se considera una corrección de errores.
3 answers
El comportamiento es correcto, después de la última revisión la rama maestra es (ya que esta es la CABEZA del remoto primario) 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) ramas:
florianb$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/debian
remotes/origin/master
remotes/origin/python_codegen
Clones poco profundos
Debido a la descripción superficial en la documentación técnica, un "git-clone --depth 20 repo
[...] result [s in] cadenas de confirmación con una longitud máxima de 20."Por lo tanto, un clon superficial debería contener la profundidad solicitada de las confirmaciones, de la punta de una rama.
Como, además, la documentación de git clone
para el --single-branch
-opción describe:
"Clone solo el historial que conduce a la punta de una sola rama, ya sea especificada por la opción
--branch
o los puntos del control remoto de la rama primariaHEAD
. Cuando se crea un clon superficial con la opción--depth
, esta es la opción predeterminada, a menos que--no-single-branch
se dé para obtener los historiales cerca de las puntas de todas las ramas."
Por lo tanto, un superficial clon (con el profundidad-opción) sólo recupera sólo una sola rama (en su solicitud de profundidad).
Desafortunadamente ambas opciones (--depth
y --single-branch
) han sido defectuosas en el pasado y el uso de clones superficiales implica problemas no resueltos (como se puede leer en el enlace que publiqué anteriormente), que es causado por la reescritura de la historia dada. Esto conduce en general a un comportamiento algo complicado en casos especiales.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-19 18:56:35
Después de hacer un clon superficial, para ser capaz de checkout otras ramas desde remoto ,
-
Corre (gracias @ jthill):
git remote set-branches origin '*'
Después de eso, hacer una
git fetch -v
Por último
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 línea siguiente de:
fetch = +refs/heads/master:refs/remotes/origin/master
A (sustitúyase master
por *
):
fetch = +refs/heads/*:refs/remotes/origin/*
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-15 16:13:39
De leer las respuestas y el comentario de @jthill, lo que funcionó mejor para mí fue usar la opción set-branches
en el git remote
orden:
$ 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 nombrado para que podamos obtener y checkout solo la rama requerida.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-07 16:41:01