Diese Antwort versucht herauszufinden, wie man Senior-Programmierer interessiert git
und nicht, wie man git
am schnellsten lernt - dafür ist das exzellente Git-Buch großartig oder eine beliebige Anzahl von Tutorials (=> Google). Gute Links zu dieser Antwort sind Git ist eine rein funktionale Datenstruktur oder insbesondere das kurze How Git, das Ihre Daten speichert .
Ich fürchte, ich sehe das eher düster. Ich war genau in Ihren Schuhen - ich bin ein git
Nerd und wollte ein Team von svn
winzigen Ergebnissen abbringen, seien wir ehrlich. In meinem Fall hat es dazu geführt, dass ich meine eigene Wahrnehmung aktiv ändere und akzeptiere, dass Menschen einfach nicht "zum Glück gezwungen" werden können. Menschen sind keine Computer, es ist unglaublich schwer, sie zu programmieren. Ich bin immer noch froh, dass ich es versucht habe, es hat mir auf sanfte Weise gezeigt, was ich tue und was ich in meinem Berufsleben nicht tun möchte.
Es gibt Leute, die beginnen sich zu motivieren, wenn es um neue Dinge geht, und es gibt Leute, die demotiviert sind. Das hat nichts damit zu tun git
, aber git
speziell haben Sie immer den Effekt "Warum sollten wir es überhaupt verwenden, wenn svn
es in Ordnung ist?", Was eine massive psychologische Barriere darstellt.
Tollkühnheit git
setzt auch ein intensives Interesse an abstrakten Datenstrukturen voraus . Es mag unglaublich klingen, aber meiner Erfahrung nach gibt es Programmierer, die überhaupt kein Interesse daran haben und die gelangweilt und überfordert sind von Elementen, die komplexer sind als einfache Arrays. Sie können sich hin und her streiten, ob diese den Job machen sollen, den sie machen, aber es ist, was es ist.
Wenn die Leute nicht daran interessiert sind, werden sie es nicht verstehen. Schlicht und einfach. Ich würde wetten, dass Desinteresse der Hauptgrund für schlechte Noten in der Schule ist, nicht für fehlende Intelligenz.
Das heißt, hier wäre ein Lehrplan, wie ich ihn anwenden würde, basierend auf dem Aufbau von Wissen von unten nach oben. Es hat bei mir nicht funktioniert, aber Sie können es als Inspiration nehmen, Ihre eigenen zu rollen.
GUI
Während der folgende Ansatz nicht unbedingt GUI-Unterstützung für die Aktionen benötigt ( git add
in einem Hallo-Welt-Repository ...), hilft es enorm , von Anfang an eine GUI zur Visualisierung des Repositorys zu haben. Wenn Sie sich nicht entscheiden können, welchen Sie verwenden möchten, nehmen Sie gitk
als letzten Ausweg. Wenn Sie einen visuellen Editor verwenden, suchen Sie die git
GUI-Komponente.
Die (statische) Datenstruktur ist der Schlüssel
Beginnen Sie mit der Erläuterung der internen Datentypen (es gibt nur drei plus eins: Blobs, Bäume, Commits, mit Anmerkungen versehene Tags, von denen der letzte in dieser Phase keine Rolle spielt) und ihrer Struktur. Sie können dies ganz einfach mit einem Stift auf dem Whiteboard tun. Der Baum ist einfach zu zeichnen, da er niemals geändert werden kann. Sie können buchstäblich immer nur Dinge hinzufügen. Sie können eine Wiedergabesitzung in einem frisch erstellten lokalen Repository durchführen und git cat-file
die tatsächlichen Objekte untersuchen, um ihnen zu zeigen, dass sie tatsächlich so trivial sind wie angekündigt.
Wenn Sie ihnen helfen können, das zu verstehen
- ... gibt es buchstäblich nur drei Arten von Objekten in der Geschichte, die alle sehr einfach, fast trivial und einfach sind
- ... die meisten
git
Unterbefehle "massieren" diese Objekte einfach auf die eine oder andere Art und Weise, wobei es sich um nahezu triviale Operationen handelt (im Grunde gibt es nur eine: fügen Sie irgendwo ein neues Commit hinzu), und ...
- ... alles ist sofort zu sehen mit
ls
und git cat-file
...
dann haben sie die mentale Übersetzung dessen, was sich tatsächlich im Repository befindet. An diesem Punkt erinnern sich die Senioren vielleicht daran, dass die Interna von svn
arkaner Magie sind (hatten jemals Probleme mit Sperren im SVN-Repository oder mit der "Wiedereingliederung" von Zweigen und dergleichen?), Und dies kann sie nur ein wenig motivieren.
Ein Problem, speziell bei Menschen verwendet svn
, ist gewöhnungsbedürftig zu der Idee , dass ein commit (das Objekt, nicht die Handlung) immer ist das ganze Verzeichnisbaum. In svn
werden Personen zum Festschreiben einzelner Dateien verwendet. Es ist ein radikal anderer Ansatz. Oh, und die Tatsache, dass derselbe Begriff "Festschreiben" sowohl für ein statisches Objekt als auch für eine Aktion verwendet wird, hilft auch nicht.
Das andere Problem für svn
Jungs ist, dass sie svn
einen linearen Verlauf verwenden, keinen Baum. Dies ist wiederum völlig anders. Das ist also die Zeit , diese Unterschiede zu zeigen viel .
Aktionen in Bezug auf die Struktur erklärt
Wenn sie verstanden haben, aus welchen Teilen ein git
Repository besteht, ist es an der Zeit, ihnen genau zu zeigen , was die einzelnen git
Unterbefehle in Bezug auf diese tun.
Ich spreche über add
, commit
in Verbindung mit dem lokalen Arbeitsverzeichnis und der Bühne (stellen Sie sicher, dass sie verstehen, dass das Arbeitsverzeichnis nicht mit dem Staging-Bereich identisch ist, der nicht mit dem Repository identisch ist).
Wenn sie verstanden haben, dass diese Befehle einfach den Baum vergrößern (der zu diesem Zeitpunkt wiederum aus drei Typen besteht - Blobs, Bäume, Festschreibungen, nicht nur Festschreibungen), können Sie eine erste git push
und git pull
(im Schnellvorlaufmodus!) ) , um ihnen zu zeigen , dass git
buchstäblich nur seine Objekte um drängt, dass die Hash - Werte sind wirklich nur Inhalt Hashes, dass man leicht das Zeug um mit einem Dateisystem - Kopierbefehl usw. kopieren.
Halten Sie sich natürlich fern von unnötigen Optionen dieser Befehle, wir sprechen git add hello.txt
hier.
Geäst
Beachten Sie, dass die Verzweigung für die svn
Menschen besonders schwer ist , da sie völlig anders ist. Das svn
Modell ist viel einfacher zu visualisieren, da es im Grunde nichts zu visualisieren gibt - es ist in einfacher Sicht. Das git
Modell nicht so sehr. Vergewissern Sie sich von Anfang an, dass es sich bei Zweigen und Tags lediglich um "Haftnotizen" handelt, die auf eine bestimmte Stelle verweisen, und dass sie im Sinne der statischen, unveränderlichen Historie tatsächlich nicht "existieren".
Machen Sie dann ein Beispiel nach dem anderen, um zu zeigen, was Sie tatsächlich damit machen können. Wie Sie selbst gewohnt zu sein scheinen, sollten git
Sie keine Probleme haben, dort Motivation zu finden. Stellen Sie sicher, dass sie dies immer in Bezug auf das Wachstum des Baums sehen.
Wenn sie das unten haben, können Sie erklären, wie git pull
wirklich ist git fetch && git merge
; Wie alle Repositorys tatsächlich genau die gleichen Objekte enthalten (entspricht git fetch
fast dem Kopieren von Inhalten scp
innerhalb des Git-Objektverzeichnisses) und so weiter.
Wahrscheinlich, wenn Sie bis zu diesem Zeitpunkt Ihr Interesse noch nicht geweckt haben, können Sie genauso gut aufgeben, aber wenn sie es schaffen, so weit zu kommen, haben sie alle mentalen Werkzeuge zur Verfügung und es sollte wenig geben Angst mehr beteiligt. Der Rest (Git-Workflow ...) sollte dann bergab sein.
Letzte Worte
Das klingt nach viel Aufwand und ist es auch. Verkaufen Sie das nicht als "Wir brauchen das für dieses Projekt", sondern als "das hilft Ihnen persönlich bei der Entwicklung und hilft Ihnen bei all Ihren weiteren Interaktionen". Dafür braucht man viel Zeit und Zeit ist Geld. Wenn Sie diesbezüglich keine Zustimmung des Managements haben, lohnt es sich möglicherweise nicht. Sie sollten es vielleicht mit Ihrem Chef besprechen.
Wenn Sie beschließen, das Unterrichten der Entwickler aufzugeben, die scheinbar nicht in der Lage sind, es zu git
verstehen , es jedoch in Zukunft unbedingt zu verwenden, sollten Sie in Betracht ziehen, die gesamte Interaktion mit git
Befehlen durch zusammengestellte Skripte oder eine GUI zu ersetzen, die alle git
Details wegnimmt. Gießen Sie die gesamte Fehlerkontrolle usw. in die Skripte und versuchen Sie, diese zum Laufen zu bringen.