git graph


Mein neues Lieblingsspielzeug aktuell ist git. Rein von der Größe her ist das Package mit 20 MB relativ leicht. Dennoch enthält das Kommandozeilen-Tool eine Reihe von interessanten Features. Git ist so eine Art von Textadeventure für Erwachsene. Viele denken bei git an github, also an social coding. Aber noch sehr viel interessanter wird es, wenn man git standalone einesetzt auf seiner lokalen Festplatte. Man kann damit sehr übersichtlich komplexe Projekte durchführen, so ähnlich wie das Konzept der objektorientierten Programmierung nur sehr viel weitreichender. Im wesentlichen führt git dazu, dass man anders programmiert. Man lernt wie man sich Sourcecode leichter memorieren kann, und man verzichtet darauf, Programmstrukturen zu erstellen. Damit ist gemeint, dass die Arbeitsstruktur mit git üblicherweise darin besteht, dass man das bestehende kaputt macht. Also wesentlich schneller bereit ist, umfangreiche Änderungen am Code vorzunehmen. Einerseits betrifft das das löschen von auskommentiertem Code, meint aber auch, dass man das Projekt sehr viel aggressiver weiterentwickelt als ohne git.

Hier mal das Beispiellog von einem Robotik-Projekt. Man sieht darin zweierlei: erstens wird jede Aktion am Sourcecode eindeutig mit einem SHA1-Hash-Wert versehen und zweitens sind die Commits untereinander gegliedert, bilden also eine Hierarchie ähnlich wie das Inhaltsverzeichnis eines Texte. Das ganze ist vergleichbar mit einer Todo Liste bestehend aus Tasks und Subtasks, nur rückwirkend weil die Liste schon abgearbeitet wurde.

Ganz am Anfang habe ich noch alle Commits brav in Master hineingeschrieben weil mir Branches noch als zu komplex erschienen. Später habe ich dann vorsichtig zuerst mit einem Development-Branch und später dann auch mit Features Branches gearbeitet.

*   4d2063c (HEAD, master) - legs animation - simple pathplanner
|\  
| * dbf2665 pathplanner for navmesh
| * 7b1a482 pathplanner
| * 227f4b3 improved cyclic fegs
| * 3fc33fd cycling legs
| * 39a5300 framecounter
| * 9371e8a legs
| * bb45697 second path
* |   1609081 lane changing
|\ \  
| |/  
| * 4ae6ca2 move on lane
| * 6872f02 moving at lane
| * 02be8e0 lane class
| * 2c22e99 lane
| * daa4dd8 path + edges
| * eb48f91 steering
* |   4449ef5 rotate triangle: former circle car is replaced by triangle shape. The new triangle can rotate smooth and move to a goal.
|\ \  
| |/  
| * b654077 complex move
| * eb3705f smooth rotation
| * 262257b rotate to mouse
| * a6c6284 improved triangle car
| * f26fd5d rotate point from triangle
| * 943df72 triangle car
* |   613d61e path follow + lyx dokumentation, merge branch 'development'
|\ \  
| |/  
| * ad9999a lyx doku import
| * d12af80 path
* |   9c8b7f0 Merge branch 'development' issue: waypoints
|\ \  
| |/  
| * 0841ee0 task follow
| * 16c20d3 waypoint class
| * 9257764 moveright/left
|/  
*   20a36d9 Merge branch 'followpoint'
|\  
| * caaa4fa minor
|/  
* e8bb9b1 minor changes
* d9e8443 moveto angle
* 0f05c40 better mouse follower
* f2b740e distance
* 9c09559 documentation
* 044d915 show point
* c01927d frame pause
* da3a2b0 textmenu
* fa2248b pygame gui
* 1058153 alles geloescht
* 397a728 (tag: v1.0) reset to old version without objects
* ab7de1e problems with parent object
* ba813d0 robotid as parameter
* 9733e36 threading
* bc1141b dual robotid
* ee2c186 remove task
* c250015 Import
* 396c272 for
* 0470c22 world hinzugefügt

Zur Veranschaulichung noch eine Abbildung aus der gitk GUI:

Für Außenstehende dürfte es reichlich konfus wirken. Aber übersetzt steht da, dass es einmal den Master-Branch gibt, welcher funktionsfähigen und getesten Code enthält. Also das was gedacht ist für den Endverbraucher. Von diesem Master-Branch gibt es einen Spinoff, genannt Development der schon etwas progressiver d.h. aggressiver ist. Dort wird an neuen Dingen gearbeitet. Und von diesem gibt es noch eine weitere Abspaltung, genannt issue/pathtomouse wo an einem sehr experimentellen Detail gearbeitet wird, was aktuell noch überhaupt nicht funktioniert, und das ganze Programm zum Absturz bringen kann. Gewissermaßen hat man also beides: eine penible Übersicht und Raum für Chaos. Einmal beim Kommentar „Not working“ habe ich sogar nicht-funktionsfähigen Code eingescheckt. Das wurde dann aber eine Iteration später wieder korrigiert. Es ging damals konkret um ein Stopschild für die Autosimulation, was irgendwie nicht das gemacht hat, was es sollte.

Die erfahrenen git-User werden sagen, dass die obige Abbildung noch eine von den leichteren ist, und das sie mehrere issue-Branches parallel bearbeiten, die noch dazu von mehreren Leuten verändert werden. Nun, damit kann ich aktuell nicht dienen, ich bin noch ein git-Einsteiger.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s