Was bedeutet "Bühne" in Git?

316

Ich finde git schwer zu verstehen, da ich die Bedeutung der für die Aktionen verwendeten Wörter nicht finden konnte. Ich habe das Wörterbuch auf die Bedeutung von "stage" überprüft, und keine der Bedeutungen war mit Versionskontrollkonzepten verbunden.

Was bedeutet "Bühne" im Kontext von Git?

000
quelle
11
Git hat in der Tat einen eigenen Wortschatz. Und da jede Anweisung im speziellen Vokabular formuliert ist, ist es schwierig, anzufangen. "Bühne" ist git add file.extfür eine bestimmte Datei zu tun , oder git add .alle modifizierten und nicht verfolgten Dateien zu beeinflussen. Dateien, die auf diese Weise hinzugefügt wurden, werden als "bereitgestellt" bezeichnet und beim nächsten "Festschreiben" berücksichtigt. Das Commit ist eine Momentaufnahme Ihrer Arbeit, die Sie zB mit erstellt haben git commit -m "I wrote something".
Jonatan Öström
11
Git ist schwer zu verstehen, da es kein konzeptionelles Tutorial gibt. Alle durchlaufen unnötige Details.
Xaqron
2
Meinten Sie, das "terminology" -Tag aus dieser Frage zu entfernen? Es scheint mir ein vollkommen gültiges Etikett zu sein.
Philip Kendall
Aus irgendeinem Grund kann ich die Bedeutung der Inszenierung am besten anhand der folgenden
Lamar

Antworten:

310

Eine Datei zu inszenieren bedeutet einfach, sie für ein Commit vorzubereiten. Git, mit seinem Index können Sie nur bestimmte Teile der Änderungen festschreiben, die Sie seit dem letzten Festschreiben vorgenommen haben. Angenommen, Sie arbeiten an zwei Funktionen - eine ist fertig und eine muss noch bearbeitet werden. Sie möchten einen Commit durchführen und nach Hause gehen (endlich um 5 Uhr!), Möchten aber die Teile des zweiten Features nicht festschreiben, was noch nicht geschehen ist. Sie inszenieren die Teile, von denen Sie wissen, dass sie zum ersten Feature gehören, und legen fest. Jetzt ist Ihr Commit Ihr Projekt, bei dem die erste Funktion ausgeführt wird, während die zweite in Ihrem Arbeitsverzeichnis noch in Bearbeitung ist.

Turm
quelle
5
Gute Erklärung. Beachten Sie, dass es Ihnen bei der Verteilung von git offensichtlich möglich ist, beide Funktionen festzuschreiben, da es sich (zunächst) um lokale Festschreibungen handelt. Möglicherweise möchten Sie die Änderungen jedoch in ein Commit pro Feature aufteilen, und erneut ist die Bereitstellung hilfreich.
sleske
77
Ich verstehe nicht, warum du dafür eine Inszenierung brauchst. Ich kann dies mit HG oder sogar SVN tun, indem ich nur die relevanten Dateien festschreibe. Es scheint, als ob diese Funktion in erster Linie dazu gedacht ist, Menschen zu helfen, die auf der Befehlszeile bestehen, wo es schwieriger ist, die Kontrollkästchen für das, was Sie festlegen, zu aktivieren.
jiggy
78
Mit @jiggy git können Sie einen Teil einer Datei inszenieren . Sie können auch eine Datei bereitstellen, weitere Änderungen vornehmen und dann den Status festlegen, in dem sie sich beim Staging befunden hat. In Subversion ist das nicht möglich.
Izkata
4
@jiggy In SVN gibt es eine Zeitspanne zwischen der Auswahl der zu festschreibenden Dateien / Teile der Dateien und dem Abschluss der Festschreibungsnachricht, in der aufgezeichnet wird, welche Dateien / Teile Sie für die Festschreibung ausgewählt haben. Es wird möglicherweise nie explizit erwähnt, es wird möglicherweise im SVN-Client implementiert und nicht als tatsächlicher Teil des Repositorys. Es handelt sich möglicherweise nur um einige Flags im Speicher, aber das ist die Phase von SVN. Ich habe HG nicht angeschaut, aber ich vermute, dass es dasselbe tut. Der Unterschied zu git besteht darin, dass git erkennt, dass es sich um eine Sache handelt, sie auf der Festplatte aufzeichnet und es dem Benutzer ermöglicht, direkt darauf zuzugreifen.
8bittree
7
Der zweite Pfeil "Stage Files" in der Abbildung ist möglicherweise irreführend. "Stage Hunks" könnten genauer sein?
Ida
137

Da es bisher von allen auf "formale" Weise beantwortet wurde, lassen Sie mich dies mit Alternativen tun, um das Lernen mit der Kraft von Metaphern zu verbessern.

Der Staging-Bereich sieht also so aus:

  • einen Cache mit Dateien, die Sie festschreiben möchten
  • Nicht eine Reihe von Rohren, sondern ein Muldenkipper, der bereit ist, die Arbeit, mit der er beladen wird, in das Depot zu befördern
  • Ein magischer Ort, an dem ausgewählte Dateien mit Ihrer Zauberei in Stein verwandelt werden und auf magische Weise nach Belieben zum Repository transportiert werden können
  • die gelbe Backsteinstraße, damit die Dateien glücklich in das Repository gelangen (oder herunterfallen, wenn Sie zurückkehren möchten)
  • Der fiktive Ort am Seehafen, an dem Akten mit einem Paar Zementschuhen eingeliefert und dann in das Endlager Meer geworfen werden
  • An der Rezeption der Bibliothek legen Sie die Akten dort ab, damit der Bibliothekar die Ablage in der Bibliothek vorbereiten kann
  • Eine Schachtel, in die Sie Dinge legen, bevor Sie sie unter Ihr Bett schieben. In Ihrem Bett befinden sich mehrere Schachteln, in die Sie zuvor geschoben haben
  • die Ladebucht der Dateien, bevor sie mit dem Power Loader in das Repository-Warehouse gelangen
  • Der Filter einer elektrischen Filterkaffeemaschine. Wenn die Dateien wie Kaffeepulver sind, dann sind die zugesicherten Dateien der gebrühte Kaffee
  • Im Büro des Scrooge McDuck neben dem Tresor sind die Akten wie die Münzen, bevor sie in den Tresor seines riesigen Geldbehälters gelangen
  • In der Zoohandlung sind Sie verpflichtet, sobald Sie ein Haustier mit nach Hause nehmen

Es ist magisch !

Spoike
quelle
Lieben Sie die Analogien; Weg zur Knospe ^ _ ^
Musa Al-hassy
Lieben Sie die abschließende Analogie.
MeTchaikovsky
35

Das Staging ist ein Schritt vor dem Festschreibungsprozess in git. Das heißt, ein Commit in git wird in zwei Schritten ausgeführt: Staging und tatsächliches Commit.

Solange sich ein Änderungssatz im Staging-Bereich befindet, können Sie ihn mit git nach Belieben bearbeiten (Staging-Dateien durch andere Versionen von Staging-Dateien ersetzen, Änderungen aus dem Staging entfernen usw.).

Defekte Metapherzeit:

Stellen Sie sich ein Szenario vor, in dem Sie die Mover anrufen, um Ihre Sachen von Ihrer alten Wohnung in Ihre neue Wohnung zu bringen. Bevor Sie das tun, werden Sie Ihre Sachen durchgehen, entscheiden, was Sie mitnehmen und was Sie wegwerfen, es in Säcke packen und es im Hauptflur lassen. Die Mover kommen einfach, holen die (bereits gepackten) Taschen vom Flur und transportieren sie. In diesem Beispiel wird alles inszeniert, bis die Mover Ihre Sachen erhalten: Sie entscheiden, was wohin geht, wie Sie es verpacken und so weiter (z. B. können Sie entscheiden, dass die Hälfte Ihrer Sachen weggeworfen wird, bevor die Mover überhaupt dort ankommen - das ist ein Teil der Inszenierung).

Aus technischer Sicht unterstützt das Staging auch Transaktions-Commits, indem alle Vorgänge in "Was kann fehlschlagen (Staging)" und "Was kann nicht fehlschlagen (Commit)" aufgeteilt werden:

Das Commit in git wird transaktional implementiert, nachdem das Staging erfolgreich war. Einige Schritte in der Bereitstellung können fehlschlagen (z. B. müssen Sie eine Festschreibung durchführen, aber Ihre Festplatte ist zu 99,9999% voll, und git hat keinen Speicherplatz für eine Festschreibung). Dies schlägt beim Staging fehl (Ihr Repository wird nicht durch ein teilweises Commit beschädigt) und der Staging-Prozess hat keine Auswirkungen auf Ihren Commit-Verlauf (Ihr Repository wird im Fehlerfall nicht beschädigt).

utnapistim
quelle
... und so wenig Stimmen bisher.
Ojonugwa Ochalifu
26

Wenn Sie eine Datei bereitstellen, bereiten Sie sie auf ein Commit vor. Da git diese Aktion der Benutzersteuerung zur Verfügung stellt, können Sie teilweise Festschreibungen erstellen oder eine Datei ändern, bereitstellen, erneut ändern und nur die ursprüngliche Änderung festschreiben oder wiederherstellen.

Mit Staging können Sie genauer steuern, wie Sie sich der Versionskontrolle nähern möchten.

Josh K
quelle
19

Hier kommt der Name für "stage", um die anderen hervorragenden Antworten zu ergänzen:

Ich habe das Wörterbuch auf die Bedeutung von stage überprüft und keine der Bedeutungen war mit Versionskontrollkonzepten verbunden.

Im Englischen kann "inszenieren" bedeuten

Organisation und Teilnahme an (einer öffentlichen Veranstaltung): Unterstützer der UDF veranstalteten eine Demonstration in Sofia

(von http://oxforddictionaries.com/definition/stage )

Der Name "Staging" für das Git-Feature leitet sich aus dieser Bedeutung ab: Beim Staging bereiten Sie ein Commit vor und organisieren es. Natürlich ist ein Commit nicht ganz dasselbe wie eine Aufführung, aber es ist ein wichtiges Ereignis in einem VCS :-).

sleske
quelle
3
Ich hätte gedacht, es passt besser zum Einsatz in der Post-Inszenierung
Nutzlos
Dito. Auch "ein Punkt, eine Periode oder ein Schritt in einem Prozess oder einer Entwicklung."
Darien
Der Begriff "Staging-Server" wird auch häufig verwendet, um einen Server zwischen Entwicklung und Produktion zu beschreiben.
Eternal21,
4

Bei den meisten anderen Versionskontrollsystemen gibt es zwei Speicherorte für Daten: Ihre Arbeitskopie (die Ordner / Dateien, die Sie derzeit verwenden) und den Datenspeicher (in dem die Versionskontrolle über das Packen und Speichern Ihrer Änderungen entscheidet). In Git gibt es eine dritte Option: den Staging-Bereich (oder Index). Es ist im Grunde eine Laderampe, an der Sie feststellen können, welche Änderungen versandt werden.

Quelle: http://gitready.com/beginner/2009/01/18/the-staging-area.html

Mostafiz Rahman
quelle
1
Dies scheint nichts Wesentliches über die vorherigen 6 Antworten hinzuzufügen
Mücke
Es erwähnt Index. Und Verweise auf einen sehr gründlichen Artikel. Upvoting. Übrigens sind einige Antworten oben nur Witze.
Gangnus
1

Die "Phase" ist ein technisch erforderlicher Zwischenschritt beim Einchecken einer Datei, nämlich das Sammeln der Änderungen, die dem Repository hinzugefügt werden sollen. Die Autoren von Git haben sich dafür entschieden, diesen Schritt sichtbar und dauerhaft zu machen, wenn andere VCS ihn zu einem vorübergehenden Bestandteil des Festschreibungsprozesses machen. Es ist also nur eine Option, die Git gibt, weil es kann, warum also nicht?

So wie ich es sehe, ist die Hauptsache, die Ihnen die git "stage" gibt, dass andere VCS es nicht können, um eine Datei zu überprüfen. Es ist praktisch ein unbenanntes, unkommentiertes lokales Commit, das Ihnen einen Zwischenschritt zwischen dem Abschluss Ihrer gesamten Arbeit und dem dauerhaften Commit des Repositorys und dem Speichern von nichts in Ihrem lokalen Repository bietet.

Nehmen wir zum Beispiel an, Sie haben ein Feature teilweise fertiggestellt. Es ist in einem stabilen Zustand, besteht alle Tests und könnte in Produktion gehen, aber Sie müssen noch mehr daran arbeiten. Sie können alle Änderungen vornehmen und dann an der Funktion weiterarbeiten.

Später haben Sie die Möglichkeit, Ihre bereitgestellten Daten einfach festzuschreiben (und diese Festschreibung an das Remote-Repository zu übertragen) oder Ihre neuen Änderungen in Ihren Bereitstellungsbereich einzufügen und diese dann auf einmal festzuschreiben oder nur Ihre neuen Änderungen rückgängig zu machen und Stellen Sie in Ihrem Arbeitsverzeichnis den Zustand wieder her, in dem Sie Ihre Änderungen vorgenommen haben.

Es ist durchaus möglich, den Staging-Bereich praktisch komplett zu überspringen und die -aOption zu verwenden, git commitwenn Sie den Staging-Bereich nicht als hilfreich empfinden. Viele Leute überspringen Staging und GUI-Tools ermöglichen dies normalerweise auch.

Alter Pro
quelle
"Andere VCS tun das nicht" - was lässt Sie das denken? Bei Perforce Shelving erscheint , was Sie zu beschreiben , zu tun, und auch mit einigen zusätzlichen Schnickschnack
gnat
1
@gnat ja, natürlich geben dir viele andere VCS so etwas wie Staging. Mit "anderes VCS" meine ich anderes VCS, das keine Git-Bühne hat, da sich das auf das OP bezog.
Old Pro
Ich fand diese Antwort immens besser als alle oben genannten, da es die einzige ist, die verdeutlicht, warum es überhaupt eine Inszenierung gibt ( technisch erforderlich ), eine Erklärung ihrer Herkunft ( die Autoren von Git haben diesen Schritt sichtbar und beständig gemacht ) Was ich persönlich für eine gute Definition halte ( ein intermediäres, unbenanntes, unkommentiertes lokales Commit ). Ich denke jedoch, dass es verbessert werden könnte, wenn eine Quelle für die Aussage über den Ursprung von Staging zitiert wird und etwas mehr darüber ausgeführt wird, warum dies technisch erforderlich ist . @OldPro
alexlomba87
-1

Angenommen, ich entwickle eine Anmeldefunktion und benötige 5 aufeinanderfolgende Schritte, um diese abzuschließen. Hier hilft Ihnen die Inszenierung, an Schritten zu arbeiten, wie
sie in Schritt 1 ausgeführt wurden.
getan mit Schritt 2, jetzt sind Schritt 1 und Schritt 2 richtig.
Verwirren Sie Schritt 3. Kein Problem. Auschecken Sie den letzten bereitgestellten Schritt, der Schritt 2 ist. Wenn
Sie alle 5 Schritte ausgeführt haben, bedeutet dies, dass die Funktion abgeschlossen ist.

palash140
quelle
dies scheint nicht alles zu addieren wesentlichen über Punkte gemacht und erläutert vor 9 Antworten
gnat
ja du hast recht, ich habe nur versucht, erklärung einfach und süß zu machen
palash140
Und wie ich dieses Konzept praktisch
anwenden möchte, habe
Schauen Sie sich die Diskussion hier an: Sind zweite TL; DR-Antworten akzeptabel? (FWIW im Vergleich zu früheren Antworten sieht dies nicht einfach noch süß für mich aus)
Mücke
danke mein herr, ich habe eine frage zu stellen. Ich bin auf viele Antworten gestoßen und die meisten sind zu komplex. Ja, diese sind richtig, aber schwer auf einmal zu verdauen. Ich glaube, wenn Sie nichts auf einfache Weise erklären können, dann haben Sie es nicht richtig gelernt oder wissen nicht wie um es zu benutzen. Also ist es jetzt schlecht, eine Zusammenfassung oder einen einfachen Weg zu geben, um zu antworten?
palash140