Git und Teamentwicklung (für Dummies)

Mitautor des Artikels: RicardoMilos

Einführung


Hallo! Wenn Sie hierher gekommen sind, interessiert Sie die Frage, wie Programmierer in einem Team arbeiten. Wenn Sie vorher nur alleine gearbeitet haben, scheint es Ihnen wahrscheinlich einfacher zu sein, in einem Team zu arbeiten, weil es mehr Hände gibt und Sie die Arbeit daher viel schneller erledigen können. Aber nicht so einfach. Jetzt werden wir uns damit vertraut machen, welche Tools entwickelt werden und was im Team passiert.

Git


Sicher kennen Sie diese Situation:



Dies ist ein Versionsproblem. Typischerweise tritt ein solches Problem bei kreativen Menschen auf, die ständig alles wiederholen und das Ideal erreichen. Leider ist auch beim Programmieren alles andere als immer beim ersten Mal richtig. Stellen Sie sich eine Situation vor: Sie haben herausgefunden, wie Sie einen Code wiederholen können, damit er etwas schneller funktioniert. Sie schreiben neu, kompilieren, führen aus und verstehen, dass das Programm jetzt überhaupt nicht mehr funktioniert. Alles ist kaputt.

Und hier stellen Sie fest, dass Sie die Arbeitsoption nicht gespeichert haben und die Z-Taste auf Ihrer Tastatur defekt ist, sodass Sie nicht einmal Strg + Z als Spam versenden können. In einem Anfall von Wut durchbrechen Sie den Monitor mit Ihrer gepumpten rechten Hand. Abends weinst du, in eine Decke gewickelt, und denkst über die Notlage der Programmierer nach.

Eine bedauerliche Situation ... Und um dies zu verhindern, müssen Sie Versionen Ihres Codes speichern.

Nun, Programmierer sind kluge Leute, und sie haben vollkommen verstanden, dass das Speichern aller Versionen in Form eines Dateihaufens nicht so bequem wie möglich ist und dass dringend etwas erfunden werden muss, das das Speichern von Versionen erleichtert und damit das Versionsproblem löst.

Und hier können wir eine Analogie zu Spielen ziehen. Fast alle AAA-Projekte verfügen über ein Speichersystem. Als gutes Beispiel das Spiel Papers Please.



Etwa gleich funktionieren alle Versionskontrollsysteme.

Das Versionskontrollsystem (VCS) ist ein System, das Änderungen an einer Datei oder einem Satz von Dateien über einen langen Zeitraum aufzeichnet, damit Sie später zu einer bestimmten Version zurückkehren können.

SLE-Klassifizierung:

  1. Lokal
  2. Zentralisiert
  3. Verteilt

Wir haben bereits die lokale Hartwährung herausgefunden (dies sind die gleichen Haufen identischer Dateien).

Zentralisierte Hartwährung




  • zentraler Server
    Alle Dateien unter Versionskontrolle
  • eine Reihe von Kunden
    Kopien von Dateien erhalten

Beispiele:

  • CVS
  • Subversion
  • Perforce

Verteilte harte Währung




  1. Clients kopieren das gesamte Repository vollständig
  2. Der zentrale Server ist für die Bereitstellung der Masterkopie verantwortlich
  3. Synchronisierung kann sein
    • Mit Server
    • Mit jedem Kunden


Beispiele:

  • Git
  • Mercurial
  • Basar

Warum brauche ich SLE?


  1. Speichern aller Projektänderungen
  2. Die Möglichkeit, "zu jeder Phase des Projekts" zu wechseln
  3. Die Fähigkeit zur gleichzeitigen Teamentwicklung
  4. Fähigkeit, Probleme wie die folgenden zu lösen



Git


Git - Verteiltes Versionskontrollsystem
Gepostet von Linus Torvalds
2005 - erste Version

Installation:
Linux: sudo apt install git
Windows / MacOS: Link

Entwickler verwenden:

  • GNU / Linux
  • Android
  • Wein
  • Google
  • Chrom
  • jQuery
  • Php
  • MediaWiki
  • Qt

Grundbegriffe


Repository (Repository, Repo) - ein Ort, an dem die Hartwährung ihre Metadaten und eine Datenbank mit Projektobjekten speichert
Arbeitsverzeichnis - Eine Kopie einer bestimmten Version eines Projekts, die aus dem Repository extrahiert wurde
Der vorbereitete Bereich ( bereitgestellter Bereich ) - eine Servicedatei mit Informationen darüber, was in der nächsten Revision des Projekts enthalten sein sollte
Revision (Revision) - Ein Objekt, das die Änderung des Projektstatus (Version des Projekts) speichert.
Commit - Erstellen einer neuen Revision

Konfigurieren Sie GIT


Benutzername einstellen

git config --global user.name "Your Name" git config --global user.email you@abc.net 

Die Einstellungen werden in einer versteckten .gitconfig-Datei (im Home-Verzeichnis des Benutzers) gespeichert.

 [user] name = John Doe email = jdoe@example.com 

Repository erstellen

 mkdir first_git_repo cd first_git_repo git init 

Status der Projektdatei


  1. Behoben
    Die Datei befindet sich bereits im Repository
  2. Geändert
    Die Datei unterscheidet sich inhaltlich von ihrem festgeschriebenen Status
  3. Vorbereitet
    Eine geänderte Datei, die nach dem Erstellen einer neuen Revision festgeschrieben wird (diese Datei fällt in diese Revision).

Mit Code arbeiten




  • Repository-Initialisierung

     git init 
  • Oder zu einer bestimmten Revision wechseln
     git checkout _ 

  1. Änderung des Projektcodes: Erstellen / Löschen / Bearbeiten von Dateien
    In jeder IDE
  2. Status anzeigen
    git status
  3. Hinzufügen geänderter Dateien zum Index
    (Übergang zum Zustand der Inszenierung)
    git add ___
  4. Erstellen einer Revision (von Staged zu Repo)
    git commit -m ""

Fassen Sie zusammen




Arbeite mit harter Währung


Was lagern?

[+] Alle Quellcodedateien
[+] Alle für die Kompilierung erforderlichen Ressourcen
[+] Einstellungen für die Projektzusammenstellung
[-] Projekteinstellungen in der IDE
[-] Dateien aus dem Quellcode kompiliert
[-] ausführbare Dateien

Aus dem Index löschen

git rm _

Ein Commit kann Änderungen an mehreren Dateien enthalten

Wann verpflichten?

  • Als ich eine kleine Aufgabe erledigt habe
  • Wenn das Problem groß ist, teilen Sie es in logische Unterteile auf
  • Der Code muss betriebsbereit sein!

Verlauf anzeigen

 git log git log --graph 



Versionsnummer = SHA-1 Hash ändern

Wechseln Sie zu Audit

 git checkout sha1_hash git checkout _8__sha1 

Zweige


Ein Zweig ist eine Folge von Commits, in denen parallel eine Funktion entwickelt wird

Hauptzweig - Master



Niederlassungen in GIT


Alle im Repository vorhandenen Zweige anzeigen

git branch

Zweig erstellen

git branch

Zum Zweig wechseln

git checkout
Zu diesem Zeitpunkt sollten keine nicht gespeicherten Änderungen vorgenommen werden.

Erstellen Sie eine Verzweigung und wechseln Sie zu dieser

git checkout -b

Zweige zusammenführen


Zweige zusammenführen - der Prozess der Integration von Änderungen (Commits) von einem Zweig in einen anderen:

b1 - Zweig, zu dem wir Änderungen hinzufügen
b2 - Zweig, aus dem wir Änderungen hinzufügen



 git checkout b1 git merge b2 

Verlauf anzeigen


Fensterdienstprogramme:

  • gitg
  • gitk
  • gitx
  • gitKraken



Zweige löschen


Zweig löschen

git branch –d _

LÖSCHE einen Zweig

git branch –D _

Oder löschen Sie den Zweig, ohne darauf zu warten, dass die Commits zum Master verschoben werden

Nicht gespeicherter Änderungspuffer


Oder "Was tun, wenn Sie zu einem anderen Zweig wechseln und frühzeitig ein Commit durchführen müssen?"

Schreiben Sie Änderungen in den temporären Puffer

git stash

Extrahieren Sie diese Änderungen aus dem Puffer

git stash pop

Nützliche Links:

git-scm.com/book/en/v2
githowto.com/ru
en.wikipedia.org/wiki/version_system

Teamentwicklung


Wenn Sie also zu dieser Zeile kommen, bedeutet dies, dass Sie zumindest ein wenig mit Git zu tun haben (ich hoffe es wirklich). Aber was ist mit der Teamentwicklung? Schauen wir uns dieses Problem genauer an.

Ein kleines humorvolles Rätsel:

Gegeben:

  • N Entwickler
  • Arbeitsplätze
  • Leistungsbeschreibung (TOR)
  • Das Internet

Frage:

  • Wie kann man ein Projekt durchführen, ohne die Aufmerksamkeit der Pfleger auf sich zu ziehen?

Die Antwort lautet:

  • Gut koordiniertes Team und harte Arbeit

Hmm, was ist ein Team überhaupt? Wie ist sie

Ein Team besteht aus wenigen Personen:

  • mit komplementären Fähigkeiten (jemand programmiert, jemand entwirft usw.)
  • Streben nach gemeinsamen Zielen (alle müssen die Aufgabe des Kunden erfüllen, um vollständige Selbstzufriedenheit zu erreichen)
  • Teilen der Verantwortung für das Erreichen des Projektziels (wenn plötzlich eines der Teammitglieder Schwierigkeiten mit seiner persönlichen TK hat, werden ihm seine Teamkollegen immer zu Hilfe kommen (dies sollte nicht missbraucht werden, sonst sind Sie für das Team einfach unnötig).

Ein sehr wichtiger Hinweis: Im Team sollte man sich absolut wohl fühlen und versuchen, mit dem gesamten Team auszukommen, sonst kann alles schief gehen.

Jetzt verstehst du also, was ein Team ist. Aber die nächste Frage, die sich in Ihrem Kopf stellt (ja, ja, die Autoren dieses Artikels können Gedanken lesen): „Und wer ist für was im Team verantwortlich? Hat jeder seinen eigenen Platz? Oder macht jeder was er will? “

Natürlich hat jeder Teilnehmer im Team seine eigene Rolle und seine eigenen Aufgaben. Andernfalls würde es ein Chaos geben, anstatt ein Produkt zu entwickeln. Schauen wir uns die Rollen in der Befehlsprogrammierung an:

  1. Teamleiter:

    Team Leader ist eine Kreuzung zwischen einem Projektmanager und einem qualifizierten Entwickler.

    Bei Projekten gibt es zwei Hauptrollen: Management - PM und Technical - System Architect. Timlid erfüllt teilweise beide Rollen, aber der Schwerpunkt seiner Verantwortung liegt auf dem Management (der Schwerpunkt auf dem technischen Teil liegt auf dem technischen Vorsprung).

    „Teamleiter Nr. 1: Für Ihr Team sorgen. Das Team sollte sich im Arbeitsumfeld wohl fühlen und gut motiviert sein. Darüber hinaus bietet der Teamleiter seinen Kindern berufliches und berufliches Wachstum, führt regelmäßig Diskussionen zu dem Thema, an dem sich Menschen für eine Entwicklung interessieren, und hilft ihnen dabei. “

    Die Führungsrolle des Teamleiters umfasst Verantwortlichkeiten wie Management, Zuweisung und Delegation von Aufgaben, alle Arten von Bewertungen und Planungen, Überwachung des Projektstatus sowie Besprechungen, Kommunikation mit dem Kunden, dem Management und allen Teammitgliedern (Entwickler, Tester, Manager).

    Unter der technischen Rolle: Teilnahme am Verfassen der technischen Dokumentation, Auswahl der Technologien für das Projekt, Architekturentwicklung, F & E, Codeüberprüfung, Betreuung von Junioren, Durchführung technischer Interviews, kompetente Einbeziehung neuer Teammitglieder in den Arbeitsprozess, Verantwortung für den technischen Teil des Projekts.

    Ein typischer Timlid-Arbeitstag umfasst:

    • Berücksichtigung neuer Aufgaben und deren Verteilung
    • Steh mit einem Team auf
    • Kundgebungen
    • Programmierung
    • architektonische Fragen
    • Codeüberprüfung
  2. Projektmanager:

    Der Projektmanager ist ein Spezialist, dessen Hauptaufgabe darin besteht, das gesamte Projekt zu verwalten: Entwerfen und Priorisieren, Planen von Aufgaben, Überwachen, Kommunizieren und schnelles Lösen von Problemen.

    Die Hauptverantwortung und Verantwortung von PM besteht darin, die Idee des Kunden unter Verwendung vorhandener Ressourcen rechtzeitig zu verwirklichen. Im Rahmen dieser Aufgabe muss PM einen Entwicklungsplan erstellen, ein Team organisieren, einen Projektworkflow einrichten, Feedback zwischen Teams und Kunden geben, Störungen für Teams beseitigen und die Produktqualität und -lieferung pünktlich kontrollieren.

    PM-Aufgaben können als taktisch und strategisch klassifiziert werden. Taktisch - dies ist die Lösung für die alltäglichen Probleme des Projekts, die Beseitigung von Hindernissen aus dem Team. Die strategischen Ziele sind die Koordinierung des Gesamtziels des Projekts, des Weges dorthin sowie der Bewegungsgeschwindigkeit.

    "Die Hauptzielaussage für PM lautet:" Wir brauchen dies, um zu funktionieren ", was bedeutet, dass das Team das Ergebnis in angemessener Zeit mit einem angemessenen Qualitätsniveau liefern wird."
  3. Tester:

    Ein Tester ist ein Spezialist, der ein Softwareprodukt testet, um Fehler in seiner Arbeit und deren anschließende Korrektur zu identifizieren.

    Die Hauptaufgaben des Testers:

    • Qualitätskontrolle der entwickelten Produkte.
    • Identifizierung und Analyse von Fehlern und Problemen, auf die Benutzer bei der Arbeit mit Softwareprodukten stoßen.
    • Entwicklung von Autotests und deren regulärem Lauf.
    • Testen der Skriptentwicklung.
    • Dokumentation gefundener Mängel.
  4. Entwickler:

    • Junior:
      Junior ist ein Einsteiger.

      Nach Abschluss eines Praktikums verwandelt sich eine Person in einen vollwertigen Juni. Die Hauptanforderung dafür ist die Fähigkeit, technische Aufgaben unabhängig auszuführen. Wenn ein Projekt in einer Architektur erstellt wird, sollte es sofort einen weiteren Teil der typischen Anwendungslogik implementieren. Obwohl Junior von Zeit zu Zeit Fehler machen kann, verstehen Sie die Nuancen nicht, besprechen Sie Implementierungspläne mit dem Teamleiter oder überprüfen Sie den fertigen Code mit ihm.

      Sie müssen verstehen, dass für die Aufgaben, die der Signor in zehn Minuten lösen wird, der Juni möglicherweise drei Ansätze pro Stunde benötigt. Dabei muss der Code vollständig neu geschrieben werden, was viel zusätzliche Energie kostet. Es ist wichtig, keine Angst davor zu haben und das Gleichgewicht zu spüren: wann man pusht, versucht, das Problem selbst zu lösen, und wenn man im Gegenteil aufhört, die Stirn gegen die Wand zu schlagen, die Projektzeit zu verbrennen und um Hilfe bittet. Es ist eine schlechte Idee, Ihre mangelnde Leistung mit dem Satz "Ich bin noch Juni" zu rechtfertigen.
    • Mitte:

      Middle - ein Entwickler auf mittlerer Ebene.

      Die Hauptanforderung für einen mittleren Entwickler ist die Fähigkeit, die ihm zugewiesenen Aufgaben unabhängig auszuführen. Sehr ähnlich zu dem, was im vorherigen Absatz geschrieben wurde, richtig? Es gibt jedoch eine wichtige Einschränkung - das Wort "technisch" fehlt hier. Das heißt, auf einer neuen Ebene müssen Sie die Anforderungen des Unternehmens verstehen und in technische Lösungen umsetzen können.

      Auf diese Weise:

      1. Der mittlere Entwickler versteht, was die Anwendung tut. Auf diese Weise können Sie die Aufgabe besser verstehen und sie daher genauer bewerten und besser implementieren. Wenn die Anforderungen ein Szenario nicht vollständig abdecken, wird ein guter Entwickler dies in der Planungsphase berücksichtigen. Und nicht, wenn die Anwendung bei einer nicht standardmäßigen Benutzeraktion abstürzt.
      2. Der mittlere Entwickler ist mit Standardvorlagen und -lösungen beim Erstellen einer Anwendung in seinem Bereich vertraut, versteht, warum sie benötigt werden, und weiß, wie sie angewendet werden. Die Standardisierung von Entscheidungen ist für die kollektive Entwicklung von Code von großer Bedeutung, da eine neue Person schnell herausfinden kann, was was ist, und die Anzahl der Fehler minimiert. Wenn Sie die Struktur einer typischen Anwendung verstehen, ist die Aufgabe, sie von Grund auf neu zu erstellen, ziemlich trivial. Sie können über die Prinzipien einer ordnungsgemäßen Implementierung sprechen und guten von schlechtem Code unterscheiden.
      3. Mittlerer Entwickler versteht, dass keiner funktioniert. Er weiß, wie man mit anderen Teammitgliedern interagiert: Er kann einen schwierigen Moment mit einem Designer besprechen, unvollständige Anforderungen mit einem Geschäftsanalysten klären oder eine wichtige technische Lösung mit dem Projektarchitekten (falls vorhanden) koordinieren und besitzt natürlich die geeigneten Tools für die Teamentwicklung.
    • Senior:

      Senior ist ein hochrangiger Entwickler, der viel Code gesehen, eine Reihe von Kegeln erhalten und daraus die richtigen Schlussfolgerungen gezogen hat. Die Hauptaufgabe von Signor besteht darin, die richtigen technologischen Entscheidungen im Projekt zu treffen. Die „richtigen“ sind diejenigen, die den Geschäftsnutzen maximieren und die Kosten minimieren. Ein guter Unterzeichner versteht nicht nur, was das Team entwickelt, sondern überlegt auch, welche Aufgaben die fertige Anwendung lösen soll. Bei der Entwicklung einer Website für die Auktion wundert sich der Unterzeichner immer über die Spitzenlast und versucht, Versuche vorauszusehen, wettbewerbsfähig in die Datenbanktabellen zu schreiben. Er denkt im Voraus über die Engpässe des Systems nach, über die Möglichkeit der Skalierung, erinnert sich an die Schwachstellen und Probleme, die durch den unsachgemäßen Einsatz von Tools verursacht werden.

      Ein solcher Spezialist macht eine erstaunliche Sache - löst Probleme, noch bevor sie auftreten. Von außen ähnelt es der Gabe der Voraussicht. Wenn Ihr Projekt jedoch von Feuer zu Feuer lebt und Sie ständig Codeteile wegwerfen und neu schreiben müssen, sind dies Symptome, bei denen das Projekt nicht genügend Aufmerksamkeit der Unterzeichner erhält.
  5. Designer:

    Ein Designer ist eine Person, die entwirft. Logischerweise nicht?

    Die Arbeit des Designers beginnt lange bevor das erste Pixel erscheint und endet viel später als das letzte.

    Die meisten Menschen sind es gewohnt zu glauben, dass Design tatsächlich eine Reihe von Bildern, Farben und Schriftarten ist, die an Layoutdesigner und Programmierer weitergegeben werden, um ein Produkt herzustellen. Manchmal funktioniert dieser Ansatz, aber häufiger stellt sich heraus, dass es sich um ein Projekt handelt, dessen Erweiterung des Portfolios dann peinlich ist.

    Tatsache ist, dass es zur Lösung des Problems nicht ausreicht, ein Bild zu zeichnen. Dabei durchläuft ein guter Designer 4 Schritte. Hier sind sie:
    • Das Problem verstehen:

      Die Arbeit beginnt mit einem Verständnis des Problems, wie ein Theater mit Kleiderbügel: Bis Sie Ihre Oberbekleidung aufgeben, werden Sie nicht weiter gehen. Wenn Sie sich nicht mit dem Problem befassen, erhalten Sie ein nicht lebensfähiges Produkt.
    • Suche nach einer Lösung:

      Wenn das Problem klar ist, ist es Zeit, nach einer Lösung zu suchen. In etablierten Begriffen sind dies alle Arten von Skizzen und Prototypen, die dazu beitragen, eine vorläufige Vision des Endprodukts zu erstellen.
    • Design:

      Dies ist nur das Zeichnen von Bildern und das Auswählen von Schriftarten. Viele Designer beginnen hier und beenden die Arbeit sofort, und die Ergebnisse der Arbeit solcher Designer sind bei Dribble oder Behans in großer Zahl zu sehen.
    • Genehmigung:

      Selbst wenn Sie eine schlanke und elegante Lösung im Kopf und auf dem Papier haben, bedeutet dies nicht, dass sie für den Kunden gleich aussieht. Wenn Sie diese Phase auslassen und dem Kunden einfach die Best Practices geben, werden diese bestenfalls nach Ihrem eigenen Verständnis wiederholt. Was nach der Bearbeitung durch den Client letztendlich übrig bleibt, ähnelt ein wenig Ihrer Arbeit.

Nun, endlich sind Sie mit allen Beiträgen in der Teamentwicklung vertraut. Hier habe ich nur die Beiträge aufgelistet, die sich auf die Programmierung beziehen. Wenn wir die Entwicklung eines Softwareprodukts als Geschäftsprojekt betrachten, werden natürlich weitere Rollen hinzugefügt, z. B. Buchhalter, Vermarkter usw.

Fazit


Nun, wenn Sie bis zu diesem Punkt lesen - Glückwunsch, Sie sind unglaublich cool! Nein, wirklich, Ihr Gehirn hat noch nicht so viele Informationen? Ich hoffe nicht

Ich hoffe, unser Artikel hat Ihnen geholfen, alle Feinheiten der Teamentwicklung zu verstehen. Und Sie haben keine Fragen mehr zu diesem Thema. Und wenn Sie zu einer Super-Duper-Unwirklich-Cool-und-Berühmten Firma kommen und eingestellt werden (wenn sie nur versuchen, nicht zu akzeptieren), werden Sie nicht verwirrt sein und Ihrem Chef zeigen, wer der Hauptprogrammierer ist. Oder vielleicht gründen Sie Ihre eigene Firma, wer weiß ;-)

Vielen Dank für Ihre Aufmerksamkeit!

PS


Der Artikel wurde von Studenten der MSHP (Moscow School of Programmers) auf der Grundlage von Vorlesungen aus dem Kurs Industrial Programming erstellt.

Source: https://habr.com/ru/post/de440816/


All Articles