Diese Antwort versucht herauszufinden, wie man Senior-Programmierer interessiert gitund nicht, wie man gitam 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 gitNerd und wollte ein Team von svnwinzigen 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 gitspeziell haben Sie immer den Effekt "Warum sollten wir es überhaupt verwenden, wenn svnes in Ordnung ist?", Was eine massive psychologische Barriere darstellt.
Tollkühnheit gitsetzt 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 addin 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 gitkals letzten Ausweg. Wenn Sie einen visuellen Editor verwenden, suchen Sie die gitGUI-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-filedie 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
gitUnterbefehle "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
lsund 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 svnarkaner 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 svnwerden 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 svnJungs ist, dass sie svneinen 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 gitRepository besteht, ist es an der Zeit, ihnen genau zu zeigen , was die einzelnen gitUnterbefehle in Bezug auf diese tun.
Ich spreche über add, commitin 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 pushund git pull(im Schnellvorlaufmodus!) ) , um ihnen zu zeigen , dass gitbuchstä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.txthier.
Geäst
Beachten Sie, dass die Verzweigung für die svnMenschen besonders schwer ist , da sie völlig anders ist. Das svnModell ist viel einfacher zu visualisieren, da es im Grunde nichts zu visualisieren gibt - es ist in einfacher Sicht. Das gitModell 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 gitSie 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 pullwirklich ist git fetch && git merge; Wie alle Repositorys tatsächlich genau die gleichen Objekte enthalten (entspricht git fetchfast dem Kopieren von Inhalten scpinnerhalb 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 gitverstehen , es jedoch in Zukunft unbedingt zu verwenden, sollten Sie in Betracht ziehen, die gesamte Interaktion mit gitBefehlen durch zusammengestellte Skripte oder eine GUI zu ersetzen, die alle gitDetails wegnimmt. Gießen Sie die gesamte Fehlerkontrolle usw. in die Skripte und versuchen Sie, diese zum Laufen zu bringen.