new: docs/git.md

This commit is contained in:
teldra 2022-04-17 12:37:17 +02:00
parent bac052f5fe
commit 32d48f44b5
1 changed files with 8 additions and 13 deletions

View File

@ -35,25 +35,20 @@ Aus den obigen Ideen ergeben sich nun ein paar abstraktere Konzepte, die git so
### Branches
Dieses Konzept versuche ich über das log zu erklären.
Wenn ich ein leeres repo anlege, dann wird auch ein leeres log angelegt. Zusätzlich wird aber auch ein branch angelegt zu dem das log dazugehoert. Ein branch ist ein Name. Früher war der Standardname "master", ändert sich aber zu "main". Das ist konfigurierbar. Je nach konfiguration wird mit `git init` also auch der branch main angelegt zu dem das log dann gehoert. Bisher sprechen wir also eigentlich vom log des branches main. Normalerweise sind alle branches gleich aber dieser hat eine Besonderheit. Er hat keine Abhängigkeit.
Um das besser zu erklaeren, nehmen wir an, wir haben eine Datei mit Inhalt angelegt, sie git bekannt gemacht und mit einer aussagekräftige Beschreibung versehen und so einen Eintrag im log des branches main.
Würde ich nun einen neuen branch anlegen, nennen wir ihn, weil wir gut sortieren und fehler in der ersten Datei gefunden haben, "fix-errors", und wir "in diesen branch wechseln", dann würde sich auf den ersten Blick gar nicht viel ändern. Die Datei und das log würden gleich aussehen. Sobald ich aber Änderungen an der Datei durch das Korrigieren der Fehler und das git bekanntmache und commits dafuer erstelle, diese Änderungen also ins log eintragen, dann unterscheiden sich die branches.
Das log von "fix-errors" ist nun einen commit vor dem log von "main" oder "main" eins zurueck, je nach blickwinkel.
Ich muss eine kleines Detail zum log hinzufuegen.
Wenn ich ein leeres repo anlege, dann wird auch ein leeres log angelegt. Zusätzlich wird aber auch ein branch angelegt zu dem das log dazugehoert. So ein branch hat einen Namen. Früher war der Standardname "master", ändert sich aber zu "main". Das ist konfigurierbar. Je nach konfiguration wird mit `git init` also auch der branch main angelegt zu dem das log dann gehoert. Bisher sprechen wir also eigentlich vom log des branches main. Normalerweise sind alle branches gleich aber dieser hat eine Besonderheit. Er ist initial, also keine kopie von irgendwo.
Mit freundlicher Hilfe komme ich zu dieser Metapher:
Stellen wir uns vor, wir gehen in den Supermarkt. Unser Einkaufswagen heisst "main" und wir definieren, das wir mit diesem auch zur Kasse später wollen. Der hat so einen Notizblock dran mit einer Tabelle. Spalten: Beschreibung (Wer, Wann und noch ein paar andere Sachen, passieren automatisch, wie auch immer sie das tun).
Stellen wir uns vor, wir gehen in den Supermarkt. Unser Einkaufswagen heisst "main" und wir definieren, das wir mit diesem auch zur Kasse später wollen. Der hat so einen Notizblock dran mit einer Tabelle, das log. Spalten: Beschreibung (Wer, Wann und noch ein paar andere Sachen, passieren automatisch, wie auch immer sie das tun).
Wir packen Nudeln, Dosentomaten (wo wir einen Smiley auf die Oberseite malen) und Sahne in den Einkaufswagen und notieren jeweils, wann wir das taten und und beschreiben das Aussagekräftig. (Notieren auch das bemalen mit dem Smiley, wenn es zur Tomatendose kommt)
Ah, da faellt uns auf, die Sahne brauchen wir garnicht. Also wieder raus aus dem Einkaufswagen und auf den Notizblock notieren, das wir sie wieder weggepackt haben.
Ah, da faellt uns auf, die Sahne brauchen wir garnicht. Also wieder raus aus dem Einkaufswagen und auf dem Notizblock notieren, das wir sie wieder weggepackt haben.
Was passiert, wenn wir nun einen neuen branch anlegen, in diesem Bild?
Um es erstmal einfach zu machen, lassen wir den Einkaufswagen stehen und dem passiert auch nichts und bleibt exakt so wie er ist. Aber wir haben plotzlich einen zweiten Einkaufswagen. Mit dem gleichen Inhalt und dem gleichen Verlauf auf dem Notizblock und dem Namen, den wir wählen. Ich halte, da nun alles fuer das Mittagessen haben, machen wir uns gedanken fuer die Feier am Abend und nennen den Einkaufswagen "party-kram".
Wir gehen nun mit dem neuen Wagen los und holen noch Bier und Chips und tragen das jeweils ein und entfernen diesen unsagbar daemlichen Smiley und tragen auch diese Änderung ein.
Was passiert, wenn wir nun einen neuen branch anlegen, in diesem Bild?
Um es erstmal einfach zu machen, lassen wir den Einkaufswagen stehen und dem passiert auch nichts und bleibt exakt so wie er ist. Aber wir haben plotzlich einen zweiten Einkaufswagen. Mit dem gleichen Inhalt und dem gleichen Verlauf auf dem Notizblock, einen Klon, quasi. Und einem Namen, den wir wählen. Ich glaube, da wir nun alles fuer das Mittagessen haben, machen wir uns gedanken fuer die Feier am Abend und nennen den Einkaufswagen "party-kram".
Wir gehen nun mit dem neuen Wagen los und holen noch Bier und Chips und tragen das jeweils ein und entfernen diesen unsagbar daemlichen Smiley von der Dose und tragen auch diese Änderung ein.
Wir kehren nun zum ersten Einkaufswagen zurueck und ich schlage das Vergleichen des Inhalts der Wägen vor (Ja an mich selbst, aber nur in diesem Falle).
Als erstes fallen auf dem Notizblock und beim Blick in den Wagen die neuen Produkte im zweiten Wagen auf. Wir sind mit dem Bier zufrieden. Aber die Chips waren doch zuviel des guten. Also wird ersteres umgepackt. Dann fällt der fehlende Smiley auf. Wir sind auch hiermit zufrieden und während wir das denken, verschwindet er auf der Dose im ersten Wagen. Nun wird automatisch auf dem Notizblock eine Variante von "mit Einkaufswagen party-kram vereinigt" oder so notiert. Wenn wir den Einkaufswagen "party-kram" nichtmehr brauchen, koennen wir ihn nun entfernen.
Das tolle an git ist, wenn etwas offen entwickelt wird, dann kann Mensch jeden Einkaufswagen an jedem möglichen Zeitpunkt für sich klonen, selber einkaufen gehen und damit reinrausraeumen was man will, und diese Veränderungen an die quelle zurueckvorschlagen.
Ich möchte ein Augenmerk auf das Verhalten beim entfernen der Sahne und des Smileys werfen. Als ich sie entnahm bzw. ihn doof fand und entfernte, habe ich nicht einfach den Eintrag jeweils entfernt, sondern eine Notiz addiert, das ich sie entnahm.
Das hat einen erheblichen Grund. Ich kann zwar wahllos Produkte entfernen und ändern, aber ich sollte nur unter bestimmten umständen die Geschichte auf dem Notizblock ändern, wenn das repo auch nur einmal geteilt ist.
Das zweite Augenmerk moechte ich auf das vergleichen der Inhalte legen der Wägen legen. Da gibt es mehrere Möglichkeiten, wie sowas in real abläuft, das war nur ein der Metapher (hoffentlich) angemessenes Beispiel.
Das zweite Augenmerk moechte ich auf das vergleichen der Inhalte der Wägen legen. Da gibt es mehrere Möglichkeiten, wie sowas in real abläuft, das war nur ein der Metapher (hoffentlich) angemessenes Beispiel.