Wenn du rennst, git branch -r
warum werden die Flammen aufgelistet origin/HEAD
? Zum Beispiel gibt es auf GitHub ein Remote-Repo mit zwei Zweigen: Master und Awesome-Feature. Wenn ich es git clone
nehme und dann in mein neues Verzeichnis gehe und die Zweige aufführe, sehe ich Folgendes:
$ git branch -r
origin/HEAD
origin/master
origin/awesome-feature
Oder in welcher Reihenfolge auch immer (Alpha? Ich fälsche dieses Beispiel, um die Identität eines unschuldigen Repos geheim zu halten). Also, was ist das HEAD
Geschäft? Ist es das, worauf die letzte Person push
beim Schieben HEAD
hingewiesen hat? Wird das nicht immer das sein, was sie herausgebracht haben push
? HEAD
s bewegen sich ... warum kümmert es mich, auf was jemand HEAD
auf einer anderen Maschine zeigt?
Ich habe gerade die Fernverfolgung und so in den Griff bekommen, also ist dies eine anhaltende Verwirrung. Vielen Dank!
BEARBEITEN: Ich hatte den Eindruck, dass dedizierte Remote-Repos (wie GitHub, bei dem niemand diesen Code einschaltet und bearbeitet, sondern nur zieht oder drückt usw.) keinen KOPF hatten und nicht haben sollten, weil es im Grunde genommen einen gab. keine Arbeitskopie. Nicht so?
quelle
Antworten:
@robinst ist korrekt.
In git können Sie auswählen, welcher Zweig standardmäßig ausgecheckt ist (dh wann Sie klonen). Standardmäßig
origin/HEAD
wird darauf hingewiesen.Auf GitHub können Sie dies in den Admin-Einstellungen für Ihr GitHub-Repo ändern . Sie können dies auch über die Befehlszeile über tun
oder ganz löschen über
Beispiel . Sehen Sie sich das Dropdown-Menü "Zweige wechseln" an.
trunk
wird geprüft, soorigin/HEAD
folgttrunk
.quelle
origin
und meine hatotherremote/HEAD -> master
mich gestört. Das Ausführen Ihres Befehls hat das für mich behoben.Der Grund, warum ein nacktes Repository einen HEAD haben kann, besteht darin, dass bestimmt wird, welcher Zweig nach einem Klon des Repositorys zunächst ausgecheckt wird.
Normalerweise zeigt HEAD auf master, und dies ist der Zweig, der ausgecheckt wird, wenn Benutzer das Repository klonen. Wenn Sie es auf einen anderen Zweig setzen (indem Sie HEAD im Bare-Repository bearbeiten), wird dieser Zweig beim Klonen ausgecheckt.
quelle
origin/HEAD
eine lokale Referenz korrekt, da es möglich ist, diese Referenz zu entfernen, ohne sie zu drücken ? Hat das Entfernen Auswirkungen auforigin
?origin/master
die Fernbedienung nicht beeinflusst.Ich hatte genau den gleichen Eindruck wie du gesagt hast.
Und ich kann diesen von github geklonten Ursprungs- / HEAD-Fernverfolgungszweig nicht einmal löschen, indem ich dies tue
Dies hatte keine Wirkung.
Kann mir jemand sagen, wie ich diesen Ursprungs- / HEAD-Fernverfolgungszweig löschen kann?
aktualisieren
Obwohl ich nicht herausgefunden habe, warum beim Klonen von Github ein Ursprung / KOPF erstellt wurde, finde ich einen Weg, ihn zu löschen.
Die neue Version von Git bieten
um den nutzlosen HEAD-Zeiger des Remote-Tracking-Zweigs zu löschen.
Und wir können auch den dummen Standardnamen 'origin' in den gewünschten Namen ändern
Hoffe das kann helfen. :) :)
quelle
git remote set-head origin -d
Sie haben Recht, dass das Pushen auf dedizierte Remote-Repos viel besser funktioniert, wenn sie "nackt" sind, dh wenn sie keine Arbeitsverzeichnisse haben. Die Architektur von Git ist für die Aktualisierung durch Patches oder
pull
(fetch
) konzipiert, was in einem verteilten VCS sinnvoll ist. Wie in den Dokumenten irgendwo angegeben, kann das Verschieben in einen Zweig, der gerade ausgecheckt ist, zu "unerwarteten Ergebnissen" führen .Der HEAD ist Teil der Anforderungen für ein gültiges Repository. Git Repository Layout sagt teilweise:
Sie werden HEAD also als Teil der Branchenliste sehen, auch wenn "es nicht viel bedeutet ...".
quelle
mkdir foobar; cd foobar; git init --bare; cd ..; git clone foobar foobar_clone; cd foobar_clone; touch file; git add file; git config --global user.email "[email protected]"; git config --global user.name "Your Name"; git commit -m "test"; git push origin master; cd ..; cd foobar; git config core.bare
gibt true aus. Außerdem gibt es bei diesen Befehlen keine Arbeitskopie der Push-Datei im Foobar-Repo.mkdir foobar; cd foobar; git init --bare; cd ..; git clone foobar foobar_clone; cd foobar_clone; touch file; git add file; git config user.email "[email protected]"; git config user.name "Your Name"; git commit -m "test"; git push origin master; cd ..; cd foobar; git config core.bare
gibt true aus. Außerdem gibt es bei diesen Befehlen keine Arbeitskopie der Push-Datei im Foobar-Repo.Wenn "origin" ein Remote-Repository ist, identifiziert origin / HEAD den Standardzweig in diesem Remote-Repository.
Beispiel:
Beachten Sie die Zeile "HEAD branch: master". Hier teilt das Remote-Repository den Clients mit, welcher Zweig standardmäßig ausgecheckt werden soll.
quelle
Es gibt immer einen Kopf, die Punkte auf den aktuell ausgecheckt Zweig auf dem Remote - Repo (was kann oder auch Master nicht sein). Sogar Remote-Repositorys haben aktuelle Zweige. Normalerweise ist es Meister, und ich kann mir keinen Grund vorstellen, warum man es ändern möchte, aber es kann geändert werden.
quelle
Ich vermute, dass jemand einen Ast geschoben und ihn HEAD genannt hat:
quelle