Das hört sich zwar nicht intuitiv an, hört mich aber an:
Ermutigen Sie sie, mit git zu experimentieren
Eines der interessanten Dinge an git ist, dass es überraschend einfach ist, einen lokalen Betrieb vollständig sicher zu machen. Als ich anfing, Git zu verwenden, war eines der Dinge, die ich tat , das ganze Verzeichnis als Backup zu zippen, falls ich etwas vermasselt habe. Ich habe später herausgefunden, dass dies ein riesiger Kludge ist und eigentlich fast nie notwendig ist, um Ihre Arbeit zu schützen, aber es hat den Vorteil, sehr sicher und sehr einfach zu sein, auch wenn Sie nicht wissen, was zum Teufel Sie tun und wie Der Befehl, den Sie versuchen möchten, wird sich herausstellen. Das einzige, was Sie vermeiden müssen, wenn Sie dies tun, ist push
. Wenn Sie nichts pushen, ist dies eine 100% sichere Möglichkeit, alles auszuprobieren, was Sie wollen.
Die Angst, Dinge auszuprobieren, ist eines der größten Hindernisse für das Erlernen von Git. Es gibt Ihnen so viel Kontrolle über alles, dass es ein bisschen entmutigend ist. Die Realität ist, dass Sie sich für den Großteil Ihres täglichen Gebrauchs an ein paar sehr sichere Operationen halten können, aber es ist einiges zu erforschen, welche Befehle dies sind.
Indem sie ihnen ein Gefühl der Sicherheit geben , sind sie viel eher bereit, selbst herauszufinden, wie sie Dinge tun können. Und sie werden viel mehr die Möglichkeit haben, einen persönlichen Arbeitsablauf auf ihrem lokalen Computer zu finden, der für sie funktioniert. Und wenn nicht jeder die gleiche Sache tut lokal , das ist in Ordnung, solange sie auf Standards einhalten , was sie schieben . Wenn es erforderlich ist, das gesamte Repo zu komprimieren, bevor eine Operation durchgeführt wird, damit sie sich so fühlen, ist dies in Ordnung. Sie können auf bessere Weise Dinge erledigen, während sie gehen und Dinge ausprobieren. Alles, um sich dazu zu bringen, Dinge auszuprobieren und zu sehen, was sie bewirken.
Dies bedeutet nicht, dass Training wertlos ist. Im Gegenteil, Training kann Ihnen helfen, Merkmale, Muster und Normen kennenzulernen. Aber es ist kein Ersatz für Hinsetzen und tatsächlich tun Sachen in Ihrer täglichen Arbeit. Weder Git noch SVN sind Dinge, über die man einfach in eine Klasse gehen kann und von denen man dann alles weiß. Sie müssen sie verwenden , um Ihre Probleme zu lösen, um sich mit ihnen vertraut zu machen und welche Funktionen für welche Probleme gut geeignet sind.
Hören Sie auf, sie davon abzuhalten, die Vor- und Nachteile von GIT zu lernen
Ich erwähnte, nichts zu pushen, was tatsächlich gegen eines der Dinge verstößt, die Sie ihnen beigebracht haben: immer "Commit & Push". Ich glaube, Sie sollten aufhören, ihnen zu sagen, sie sollen das Gegenteil tun. Git hat grundsätzlich 5 "Stellen", an denen Ihre Änderungen vorgenommen werden können:
- Auf der Festplatte, nicht festgeschrieben
- Inszeniert, aber nicht verpflichtet
- In einem lokalen Commit
- In einem lokalen Versteck
- Remote-Repositorys (Es werden immer nur Commits und Tags zwischen verschiedenen Repositorys verschoben und abgerufen.)
Anstatt sie zu ermutigen, alles in einem Schritt zu ziehen und zu schieben, ermutigen Sie sie, diese 5 verschiedenen Orte zu nutzen. Ermutigen Sie sie,
Dies wird sie ermutigen, ihre Arbeit zu überprüfen, bevor sie öffentlich zugänglich gemacht wird, was bedeutet, dass sie ihre Fehler früher abfängt. Sie werden sehen , die begehen und denken : „Warten Sie, das ist nicht das, was ich wollte“ , und im Gegensatz zu SVN, können sie gehen zurück und versuchen Sie es erneut , bevor sie schieben.
Sobald sie sich an die Idee gewöhnt haben, zu verstehen, wo sich ihre Änderungen befinden, können sie entscheiden, wann sie Schritte überspringen und bestimmte Operationen kombinieren sollen (wann sie ziehen sollen, weil Sie bereits wissen, dass Sie Fetch + Merge möchten oder wann sie auf diese Commit & Push-Option klicken müssen). .
Dies ist einer der enormen Vorteile von git gegenüber SVN, und git wurde unter Berücksichtigung dieses Verwendungsmusters entwickelt. Im Gegensatz dazu geht SVN von einem zentralen Repository aus. Daher ist es nicht verwunderlich, wenn die Tools für Git nicht für denselben Workflow optimiert sind. Wenn Ihr Commit in SVN falsch ist, können Sie nur ein neues Commit durchführen, um den Fehler rückgängig zu machen.
Dies zu tun wird natürlich zur nächsten Strategie führen:
Ermutigen Sie sie, lokale Niederlassungen zu nutzen
Lokale Niederlassungen erleichtern die Arbeit an gemeinsam genutzten Dateien erheblich. Ich kann alle Änderungen, die ich möchte, in meiner eigenen Branche vornehmen, und es wird niemanden betreffen, da ich sie nicht vorantreibe. Wenn es dann soweit ist, kann ich alle die gleichen Merge- und Rebase-Strategien verwenden, nur einfacher:
- Ich kann meine lokale Niederlassung neu gründen, was das Zusammenführen zu einer trivialen Angelegenheit macht.
- Ich könnte ein einfaches Zusammenführen (Erstellen eines neuen Commits) in master verwenden, um die Änderungen meiner lokalen Niederlassung in das Commit zu übernehmen.
- Ich kann meine gesamte lokale Niederlassung zu einem einzigen Commit für Master zusammenfassen, wenn ich der Meinung bin, dass meine Niederlassung zu chaotisch ist, um sie zu retten.
Die Verwendung lokaler Niederlassungen ist auch ein guter Anfang, um eine systematische Verzweigungsstrategie zu entwickeln. Es hilft Ihren Benutzern, die eigenen Verzweigungsanforderungen besser zu verstehen, sodass Sie eine Strategie auswählen können, die auf den Anforderungen und dem aktuellen Verständnis- / Fähigkeitsniveau des Teams basiert und nicht nur in Gitflow vorbeischaut, weil jeder davon gehört hat.
Zusammenfassung
Kurz gesagt, Git ist kein SVN und kann nicht so behandelt werden. Du musst:
- Beseitigen Sie die Angst, indem Sie zum sicheren Experimentieren ermutigen.
- Helfen Sie ihnen zu verstehen, wie sich git unterscheidet, damit sie sehen können, wie sich dadurch ihr normaler Arbeitsablauf ändert.
- Helfen Sie ihnen, die verfügbaren Funktionen zu verstehen, damit sie ihre Probleme leichter lösen können.
Dies alles hilft Ihnen dabei , die Nutzung von Git schrittweise zu verbessern, bis Sie den Punkt erreicht haben, an dem Sie mit der Implementierung einer Reihe von Standards beginnen können.
Spezielle Eigenschaften
Auf kurze Sicht könnten die folgenden Ideen hilfreich sein.
Rebase
Sie haben Rebase erwähnt und dass Sie es in Ihrer Frage nicht wirklich verstehen. Also hier ist mein Rat: Probieren Sie aus, was ich gerade beschrieben habe. Nehmen Sie einige Änderungen lokal vor, während eine andere Person Änderungen vornimmt. Übernehmen Sie Ihre Änderungen lokal . Packen Sie Ihr Repository-Verzeichnis als Backup. Holen Sie sich die Änderungen der anderen Person. Führen Sie jetzt einen Rebase-Befehl aus und sehen Sie, was mit Ihren Commits passiert! Sie können endlose Blog-Posts lesen oder Schulungen zu Rebase erhalten und wie Sie es verwenden sollten oder nicht, aber nichts davon ist ein Ersatz dafür, es live in Aktion zu sehen. Also probieren Sie es aus.
merge.ff=only
Dies wird eine Frage des persönlichen Geschmacks sein, aber ich werde es zumindest vorübergehend empfehlen, da Sie bereits erwähnt haben, dass Sie Probleme mit der Konfliktbehandlung haben. Ich empfehle Einstellung merge.ff
zuonly
:
git config --global merge.ff only
"ff" steht für "Schnellvorlauf". Eine schnelle Zusammenführung ist, wenn git Änderungen von verschiedenen Commits nicht kombinieren muss. Der Zeiger des Zweigs wird einfach auf eine neue Festschreibung entlang einer geraden Linie im Diagramm verschoben.
In der Praxis verhindert dies, dass Git jemals automatisch versucht, Merge-Commits zu erstellen. Wenn ich also lokal ein Commit durchführe und dann die Änderungen anderer Personen übernehme, anstatt zu versuchen, ein Merge-Commit zu erstellen (und den Benutzer möglicherweise zur Bewältigung von Konflikten zu zwingen), schlägt das Merge einfach fehl. Tatsächlich hat git nur a ausgeführt fetch
. Wenn Sie keine lokalen Commits haben, wird die Zusammenführung normal fortgesetzt.
Auf diese Weise können Benutzer Benutzer die verschiedenen Festschreibungen überprüfen, bevor sie versuchen, sie zusammenzuführen, und sie zwingen, eine Entscheidung darüber zu treffen, wie sie am besten kombiniert werden sollen. Ich kann zurückgreifen, mit dem Zusammenführen fortfahren ( git merge --no-ff
um die Konfiguration zu umgehen), oder ich kann sogar das Zusammenführen meiner Änderungen für den Moment aufschieben und später erledigen. Ich denke, dieser kleine Geschwindigkeitsschub wird Ihrem Team helfen, die falschen Entscheidungen über Zusammenschlüsse zu vermeiden. Sie können Ihr Team deaktivieren lassen, sobald es die Zusammenführung besser beherrscht.