remote example git git-clone

example - ¿Qué determina la rama predeterminada después de "git clone"?



git clone ssh (3)

A partir de Git 1.8.5 , el servidor enviará el nombre real de la rama a la que apunta HEAD , en la capacidad "symref". Si tiene un cliente y un servidor más nuevos que Git 1.8.5, actualizará HEAD correctamente .

Antes de eso, el cliente adivinará a qué se habrá referido HEAD al comparar el ID del objeto al que HEAD (en última instancia) apunta con todos los ID de objetos de todas las ramas. Prefiere una rama llamada refs/heads/master : si tanto HEAD como master apuntan a la misma ID de objeto, clone establecerá la rama predeterminada en el nuevo repositorio en la master .

De lo contrario, la primera rama con un OID coincidente (cuando las ramas se ordenan alfanuméricamente) será la rama predeterminada. Si no hay ramas que coincidan con los OID, entonces HEAD se establecerá directamente en la ID del objeto (es decir, un HEAD separado).

Según entiendo, la rama predeterminada de un repositorio clonado debe ser lo que HEAD señale en el repositorio que se clona.

Ahora tengo un caso donde esto no es verdad. Mi comprensión es obviamente defectuosa, entonces, ¿qué determina la rama de pago predeterminada al clonar un repositorio (al descubierto)?

La última confirmación en ese repositorio fue una combinación entre la rama a la que se hace referencia en el encabezado de la sección de repositorio simple en la rama que obtengo como la rama de pago y envío en el clon.

Ejecutando git remote show origin devuelve el git remote show origin :

Fetch URL: ... Push URL: ... HEAD branch (remote HEAD is ambiguous, may be one of the following): <bad-branch> live Remote branches: ...

Bare repo utiliza Git versión 1.8.2.1, el cliente usa 1.7.12.4, el transporte es SSH.

Tal vez la respuesta es en realidad esta aquí . Esta respuesta lo confirma. Si hay una selección de referencias simbólicas que apuntan a la misma revisión que HEAD, el cliente adivinará qué rama usar.



Un repositorio desnudo tiene una HEAD también. Eso es lo que obtienes cuando lo clonas.

De la documentación de git clone :

Clona un repositorio en un directorio recién creado, crea ramas de seguimiento remoto para cada rama en el repositorio clonado (visible usando la git branch -r ), y crea y verifica una rama inicial que se bifurca de la rama actualmente activa del repositorio clonado.

El bit sobre "rama actualmente activa" se refiere a la revisión HEAD del control remoto.

Si quieres un comportamiento diferente, puedes usar --branch o -b :

--branch <name>
-b <name>
En lugar de señalar la HEAD recién creada a la rama señalada por HEAD del repositorio clonado, apunte a la rama <name> lugar. En un repositorio no desnudo, esta es la rama que se controlará. --branch también puede tomar etiquetas y separa el HEAD en ese commit en el repositorio resultante.