Warum ist „origin / HEAD“ angezeigt, wenn „git branch -r“ läuft?
-
21-08-2019 - |
Frage
Wenn Sie git branch -r
laufen, warum die lodert macht es origin/HEAD
Liste? Zum Beispiel gibt es auf GitHub eine Remote-Repo ist, sagt, mit zwei Zweigen: Master und awesome-Funktion. Wenn ich es packen Sie git clone
und dann in mein neues Verzeichnis gehen und die Zweige Liste, sehe ich:
$ git branch -r
origin/HEAD
origin/master
origin/awesome-feature
oder was auch immer, um es in sein würde (alpha? Ich Fälsche dieses Beispiel die Identität eines unschuldigen Repo geheim zu halten). Also, was ist das HEAD
Unternehmen? Ist es das, was die letzte Person musste push
ihre HEAD
zu spitz, wenn sie gedrückt? Wird das nicht immer sein, was auch immer es war, dass sie push
ed? HEAD
s bewegen ... warum ich, was jemand HEAD
an auf einer anderen Maschine darauf egal?
Ich bin immer nur einen Handgriff auf Remote-Tracking und so, so ist dies eine schleich Verwirrung. Dank!
EDIT: Ich war unter dem Eindruck, dass Remote-repos gewidmet (wie GitHub, wo niemand in ssh wird und an diesem Code arbeiten, aber nur ziehen oder schieben, usw.) nicht und soll nicht eine HEAD habe, weil es grundsätzlich keine Arbeitskopie. Nicht so?
Lösung
@robinst ist richtig.
In git, können Sie wählen, welcher Zweig ist standardmäßig ausgecheckt (das heißt, wenn Sie klonen). In der Standardeinstellung origin/HEAD
an diesem Punkt.
Auf GitHub, diese in den Admin-Einstellungen ändern kann Ihre GitHub Repo. Sie können auch über
von der Kommandozeile tungit remote set-head origin trunk
oder löscht es insgesamt über
git remote set-head origin -d
Beispiel . Schauen Sie sich die Drop-down ‚Schalter Zweige‘. trunk
wird geprüft, so origin/HEAD
folgt trunk
.
Andere Tipps
Der Grund, ein nackter Repository eine HEAD haben kann, ist, dass, weil es die Niederlassung bestimmt zunächst nach einem Klon des Repository ausgecheckt wird.
Normalerweise HEAD Punkte zu meistern, und das ist der Zweig, der ausgecheckt ist, wenn die Leute das Repository klonen. Setzen auf einem anderen Zweig (von HEAD im nackten Repository bearbeiten) Ergebnisse in diesem Zweig wird auf Klon ausgecheckt.
Ich habe den Eindruck, dass gewidmet Fern repos (wie GitHub wo niemand ssh in und arbeiten auf dass Code, sondern nur ziehen oder schieben, usw.) nicht und sollte nicht eine HEAD haben weil es im Grunde keine Arbeitskopie. Nicht so?
ich genau denselben Eindruck hatte, wie Sie gesagt haben.
Und ich kann sogar löschen nicht, dass die Herkunft / HEAD Fernverfolgung Zweig von Github geklont, indem Sie
git branch -d -r origin/HEAD
Das hatte keine Wirkung.
Kann mir jemand sagen, wie ich diesen Ursprung / HEAD löschen Fernverfolgung Zweig?
update
Obwohl ich nicht gefunden habe, warum es ein origin / HEAD erstellt, wenn Klon von github, ich einen Weg finden, es zu löschen.
Die neue Version von git bieten
git remote set-head <name> -d
die nutzlosen HEAD Zeiger von Fernverfolgung Zweig zu löschen.
Und wir können auch die stummen Standardnamen ‚Herkunft‘ ändern, was auch immer wir wollen, indem Sie
git remote rename origin <new_name>
Hope this helfen kann. :)
Du hast Recht, dass drücken, um gewidmet Fern repos arbeiten viel besser, wenn sie ‚nackten‘ sind, das heißt, wenn sie Arbeitsverzeichnisse nicht haben. Git Architektur wird für die Aktualisierung von Patches oder pull
(fetch
) entworfen, der Sinn in einer verteilten VCS macht. Da die Dokumente irgendwo sagen, zu einem Zweig drängen, die derzeit kann, wird ausgecheckt führen in „unerwarteten Ergebnissen“ .
Der Kopf ist Teil der Anforderungen für ein gültiges Repository. Git Repository-Layout sagt, teilweise:
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.
So wirst du HEAD als Teil der Zweigliste sehen, auch wenn „es nicht viel bedeutet ...“
Wenn "Ursprung" eine Remote-Repository ist, dann origin / HEAD identifiziert den Standardzweig auf dieser Remote-Repository.
Beispiel:
$ 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)
Beachten Sie die Zeile, die sagt: "HEAD Zweig: Master". Hier wird die Remote-Repository ermöglicht Kunden wissen, welcher Zweig standardmäßig zur Kasse.
Es gibt immer einen Kopf, der Punkte auf den aktuell ausgecheckt Zweig auf der Remote-Repo (die können oder auch Master nicht sein). Auch Remote-Repositories haben Stromzweige. Normalerweise ist es Meister, und aus der Spitze von meinem Kopf kann ich nicht aus irgendeinem Grund denken, warum man sich wünschen würde, es zu ändern, aber es kann verändert werden.
Meine Vermutung ist, dass jemand einen Zweig geschoben und nannte es HEAD:
git push origin HEAD