¿Por qué es el “origen / HEAD” se muestra cuando se ejecuta “-r git branch”?

StackOverflow https://stackoverflow.com/questions/354312

  •  21-08-2019
  •  | 
  •  

Pregunta

Al ejecutar git branch -r por qué las llamas ¿Menciona origin/HEAD? Por ejemplo, hay un acuerdo de recompra a distancia en GitHub, por ejemplo, con dos ramas: maestro y temible-función. Si hago git clone de agarrarlo y luego ir a mi nuevo directorio y una lista de las ramas, veo esto:

$ git branch -r
origin/HEAD
origin/master
origin/awesome-feature

O lo que sería el fin de (alfa? Que estoy fingiendo este ejemplo para mantener la identidad de un secreto de recompra inocente). ¿Cuál es la HEAD negocio? ¿Es lo que la última persona que tenía su push <=> señaló cuando empujaron? No será que siempre sea lo que fuera que <=> ed? <=> s se mueven alrededor ... por qué me importa lo que <=> de alguien señaló en otra máquina?

Sólo estoy empezando a controlar el seguimiento a distancia y tal, así que esto es una confusión persistente. Gracias!

EDIT: Yo tenía la impresión de que dedica repositorios remotos (como GitHub donde nadie ssh y trabajar en ese código, pero sólo tirar o empujar, etc) que no y no debe tener una cabeza porque no había , básicamente, no hay copia de trabajo. No es así?

¿Fue útil?

Solución

@robinst es correcta.

En git, puede seleccionar qué rama está desprotegido por defecto (es decir, cuando se clona). Por defecto, origin/HEAD señalarán en eso.

En GitHub, Puede cambiar este en los ajustes de administración de tu repositorio GitHub. También puede hacerlo desde la línea de comandos a través de

git remote set-head origin trunk

o eliminar por completo a través de

git remote set-head origin -d

Ejemplo . Mira desplegable las ramas 'switch'. trunk se comprueba, por lo <=> siguiente <=>.

Otros consejos

La razón un repositorio desnudo puede tener una cabeza, es que debido a que determina que se ramifican está inicialmente desprotegido después de un clon del repositorio.

Normalmente, los puntos de la cabeza a dominar, y que es la rama que está desprotegido cuando la gente clonar el repositorio. Si se establece en otra rama (editando HEAD en el repositorio desnudo) resultados en esa rama está comprobando hacia fuera en el clon.

  

Yo tenía la impresión de que   repositorios remotos dedicados (como GitHub   donde nadie ssh y trabajar en   ese código, pero sólo tirar o empujar, etc.)   no y no debe tener una cabeza   porque no había, básicamente, sin   copia de trabajo. No es así?

Yo tenía exactamente la misma impresión como usted ha dicho.

Y aunque no puedo eliminar esa rama origen / HEAD a distancia de seguimiento clonado a partir de github haciendo

git branch -d -r origin/HEAD

Esto no tuvo ningún efecto.

¿Puede alguien decirme cómo puedo eliminar esa rama origen / HEAD a distancia de seguimiento?

actualización

A pesar de que no me encontré por qué hay un origen / HEAD crea cuando el clon de GitHub, que encontrar una manera de eliminarlo.

La nueva versión de Git proporcionar

git remote set-head <name> -d

para eliminar el puntero CABEZA inútil de la rama remota de seguimiento.

Y también podemos cambiar el nombre predeterminado mudo 'origen' a lo que queramos utilizando

git remote rename origin <new_name>

Espero que esto puede ayudar. :)

Tienes razón que empujando a repositorios remotos dedicados funcionan mucho mejor cuando están 'desnudo', es decir, cuando no tienen los directorios de trabajo. La arquitectura de Git está diseñado para la actualización de parches o pull (fetch), lo cual tiene sentido en un VCS distribuido. Como dicen los documentos en algún lugar, empujando a una rama que se comprueba actualmente fuera puede resultar en "resultados inesperados" .

La cabeza es parte de los requisitos para un repositorio válido. del repositorio Git dice, en parte:

HEAD

A symref (see glossary) to the refs/heads/ namespace describing the currently active  
branch. It does not mean much if the repository is not associated with any working tree  
(i.e. a bare repository), but a valid git repository must have the HEAD file; some  
porcelains may use it to guess the designated "default" branch of the repository  
(usually master). It is legal if the named branch name does not (yet) exist.

Así que vas a ver la cabeza como parte de la lista rama, aunque "no significa mucho ..."

Si el "origen" es un repositorio remoto, a continuación, origen / HEAD identifica la rama predeterminada en ese repositorio remoto.

Ejemplo:

$ git remote show
origin
$ git remote show origin
* remote origin
  Fetch URL: git@github.com:walkerh/pipe-o-matic.git
  Push  URL: git@github.com:walkerh/pipe-o-matic.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

Tenga en cuenta la línea que dice "CABEZA rama: maestro". Aquí es donde el repositorio remoto permite a los clientes saben qué rama de pago y envío por defecto.

Siempre hay una cabeza que puntos a la rama actualmente desprotegido en el repositorio remoto (que puede o no puede ser maestro). Incluso los repositorios remotos tienen sucursales actuales. Por lo general, es maestra, y la parte superior de mi cabeza No puedo pensar en ninguna razón por la que uno quiere cambiarlo, pero se puede cambiar.

Mi suposición es que alguien empujó una rama y lo llamó CABEZA:

git push origin HEAD
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top