¿Por qué es el “origen / HEAD” se muestra cuando se ejecuta “-r git branch”?
-
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í?
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