Perché “origine / HEAD” visualizzato durante l'esecuzione di “branch -r git”?

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

  •  21-08-2019
  •  | 
  •  

Domanda

Quando si esegue git branch -r perché le fiammate vuol lista origin/HEAD? Ad esempio, c'è un pronti contro termine a distanza su GitHub, dicono, con due rami: master e impressionante di funzionalità. Se faccio git clone per afferrarla e poi andare nella mia nuova directory ed elencare i rami, vedo questo:

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

O qualunque ordine che sarebbe stato a (alfa? Sto fingendo questo esempio per mantenere l'identità di un segreto di pronti contro termine innocenti). Allora qual è il HEAD azienda? E 'quello che l'ultima persona a push avuto il suo <=> puntato quando hanno spinto? Non sarà che sempre qualunque cosa fosse loro <=> ed? <=> s mossa in giro ... perché me ne importa ciò che <=> di qualcuno indicò su un'altra macchina?

Sono solo ottenere una maniglia su di monitoraggio remoto e tale, quindi questo è un persistente confusione. Grazie!

EDIT: ho avuto l'impressione che ha dedicato pronti contro termine a distanza (come GitHub dove nessuno si ssh e lavorare su quel codice, ma solo tirare o spingere, ecc) non ho e non dovrebbe avere una testa, perché non c'era , in fondo, non copia di lavoro. Non è così?

È stato utile?

Soluzione

@robinst è corretto.

In git, è possibile selezionare quale ramo estratto da default (vale a dire quando si clona). Per impostazione predefinita, origin/HEAD punterà a questo.

su GitHub, È possibile modificare questa nelle impostazioni di amministrazione per il vostro repo GitHub. È anche possibile farlo dalla riga di comando tramite

git remote set-head origin trunk

o eliminarlo del tutto tramite

git remote set-head origin -d

Esempio . Guarda le 'switch' Filiali discesa. trunk è selezionata, in modo <=> segue <=>.

Altri suggerimenti

La ragione un repository nudo può avere una testa, che è perché determina quale ramo viene inizialmente estratto dopo un clone del repository.

In genere, i punti HEAD da padroneggiare, e che è il ramo che si estrarre quando la gente clonare il repository. Impostandolo a un altro ramo (modificando HEAD nel repository nudo) si traduce in quel ramo di essere controllato sul clone.

  

Ho avuto l'impressione che   repos remoti dedicati (come GitHub   dove nessuno si ssh e lavorare su   quel codice, ma solo tirare o spingere, ecc)   ha e non deve avere una testa   perché non c'era, in fondo, non   copia di lavoro. Non è così?

Ho avuto la stessa identica impressione come hai detto tu.

E ho anche non riesco a cancellare quel ramo origine / HEAD remote-tracking clonato da github facendo

git branch -d -r origin/HEAD

Questo ha avuto alcun effetto.

Qualcuno può dirmi come posso eliminare quel ramo origine / HEAD remote-tracking?

Aggiornamento

Anche se non ho trovato il motivo per cui v'è un'origine / HEAD crea quando clone da github, ho trovato un modo per eliminarlo.

La nuova versione di git fornire

git remote set-head <name> -d

per cancellare il puntatore di testa inutile di distanza-tracking ramo.

E possiamo anche cambiare il nome di default muto 'origine' per tutto ciò che vogliamo utilizzando

git remote rename origin <new_name>

Spero che questo può aiutare. :)

Hai ragione che a spingere per repos remoti dedicati funzionano molto meglio quando sono 'vuota', cioè quando non hanno le directory di lavoro. L'architettura di Git è progettata per l'aggiornamento da macchie o pull (fetch), che ha un senso in un VCS distribuito. Come i documenti dicono da qualche parte, spingendo a un ramo che è attualmente controllato può portare a "risultati inattesi" .

La testa è parte dei requisiti per un repository valido. Git repository layout dice, in 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.

Quindi, si sta andando a vedere la testa come parte della lista ramo, anche se "non significa molto ..."

Se "origine" è un repository remoto, quindi origine / HEAD identifica il ramo predefinito su tale repository remoto.

Esempio:

$ 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)

Si noti la riga che dice "TESTA ramo: master". Questo è dove il repository remoto permette ai clienti di sapere che si diramano alla cassa per impostazione predefinita.

C'è sempre una testa che punti per il ramo attualmente verificato sul repo remoto (che può o non può essere padrone). Anche repository remoti hanno filiali attuali. Di solito è padrone, e la parte superiore della mia testa non riesco a pensare a nessun motivo per cui si vorrebbe cambiare, ma può essere modificato.

La mia ipotesi è che qualcuno ha spinto un ramo e lo ha chiamato HEAD:

git push origin HEAD
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top