Ich versuche, einen Prozess zu automatisieren und den git branch
Befehl auszugeben, um herauszufinden, in welchem Zweig ich mich befinde. Bis auf ein neu initialisiertes Repo, bei dem git branch
nichts zurückgegeben wird, funktioniert alles einwandfrei . Da ich mit dem Repo nichts gemacht habe, nicht einmal mit dem anfänglichen Commit, kann ich die Antwort akzeptieren. Wenn ich jedoch eine ausführe git status
, wird mir mitgeteilt, dass ich auf dem master
Zweig bin , wie hier zu sehen:
$ mkdir todelete
$ cd todelete
$ git init
Initialized empty Git repository in /u/u70021a/todelete/.git
$ git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
$ git branch
$
Mache ich etwas falsch? Gibt es eine Einstellung, die ich nicht richtig eingestellt habe?
Ich habe auch eine Reihe neuer Leute bei Git und ich kann ihnen nicht erklären, warum der Befehl zum Anzeigen des Zweigs, in dem sie sich befinden, nichts anzeigt, der Statusbefehl jedoch.
cat .git/HEAD
zu sehen, auf welchem Zweig es sich befindet. Wenn Sie herausfinden, dass der Zweig vorhanden ist, wird mehr CPU- und Festplattenzeit verbraucht. Deshalb haben sie dies wahrscheinlich nicht getangit branch
in einem automatisierten Prozess verwenden sollten, da es nicht für diesen Anwendungsfall ausgelegt ist. Es wäre interessant zu sehen, was die Nicht-Porzellan-Befehle hier zeigen, hatgit symbolic-ref --short HEAD
das gleiche Verhalten?git symbolic-ref
Zeigt den Namen an, der inHEAD
(daher die Referenz für verwaiste / ungeborene Zweige) enthalten ist, sofern dieserHEAD
nicht getrennt ist.HEAD
Kann in einem neuen leeren Repository nicht getrennt werden, da ein getrennter HEAD die Hash-ID eines vorhandenen, gültigen Commits enthalten muss. (In einem nicht leeren Repository mit einem abgetrennten HEADgit symbolic-ref
wird ein Fehlergit branch
zeigt nichts, weil es keinen Zweig gibt. Aber wie Sie lesen könnenman git init
:Ich habe den Teil fett gedruckt, den ich für relevant halte - es sieht so aus, als ob es noch keinen Hauptzweig gibt, aber es gibt bereits einen Verweis darauf, und deshalb wird er in gezeigt
git status
. Beim Festschreiben wird ein geeigneter Zweig erstellt.quelle
Bestehende Antworten befassen sich mit der wörtlichen Frage, warum die Ausgabe so ist, wie sie ist, aber ich denke, sie haben das eigentliche Problem irgendwie beschönigt ...
Sie sagten, Sie automatisieren etwas, daher würde ich vorschlagen, dass weder
git status
nochgit branch
das beste Tool in einem Skriptkontext ist.In dieser Diskussion finden Sie einige Alternativen: So ermitteln Sie programmgesteuert den aktuell ausgecheckten Git-Zweig
Ohne Ihre Bedürfnisse zu kennen (oder wie sich ein ungeborener Zweig verhalten soll), kann ich nicht unbedingt eine Empfehlung aussprechen, aber der Punkt, auf den ich komme, ist, dass einige Befehle für die menschliche Interaktion (Porzellan) und andere für Skripte ( Installation)
quelle
Der Zweig ist noch ungeboren. Wird
git branch
daher nichtgit symbolic-ref HEAD
angezeigt ( zeigt an, dass Ihr HEAD auf den Standardzweigmaster zeigt und dass er ungeboren ist, da ergit branch
nicht angezeigt wird , dh Sie können sich in einem Zweig befinden, der noch nicht vorhanden ist). Wenn Sie jedoch etwas festlegen, wird der Zweig erstellt.Dies ist auch der Fall, wenn Sie eine
orphan
Filiale auschecken .Ich nehme an,
git status
zeigt den Zweignamen, da dies der Zweig ist, der erstellt wird.Informationen zur Skripterstellung finden Sie unter Programmgesteuertes Ermitteln des aktuell ausgecheckten Git-Zweigs
quelle
In Git ist der Standardzweig
master
. Wenn Sie git festlegen, "verwendet" git den aktuellen Zweig, auf dem Sie sich gerade befinden. Da Sie ein neues Repository initialisiert haben, befinden Sie sich im "Standard" -Zweig. Aus diesem Grund wird es in Ihrer Zweigstellenliste nicht angezeigt. Sobald Sie Ihre Änderungen festschreiben, wird es angezeigt.quelle