diff --git a/Lerntagebuch.md b/Lerntagebuch.md index 7faa4fa..46155bf 100644 --- a/Lerntagebuch.md +++ b/Lerntagebuch.md @@ -216,6 +216,160 @@ Bekannte IDEs: •VS Code +## SU 03 14.11.2023 + +**Warum GIT?** +- ständiger zugrif auf den letzten Arbeitsstand +- zugriff auf verschiedene Sande der Programme, sowohl auf welche, die sich noch in der Produktion befinden, sich schon in Developer-Status befinden oder ein Feature in arbeit +- Mit andern Entwickten am selben code arbeiten + +_Folie 5_ +**safety creates confidence** +- einfache lokale Kopien +- zip archives +- Kopien und Archieve im Internet teilen +- keine weitern Tools notwendig +- einfach Unterschiede in Verzeichnissen aufzeigen lassen +- viele Kopien --> viel Steicherplatz wird verbracht +- es gibt keine Bezeichnungsmöglichkeiten für Codes und veränderungen +- grobe Struktuten in den Ordnern; wegen den hohen Speicherplatz verbrauch +- schwiereige Suche und Navigation (Kein Baumaufbau) +- fixes müssen manuel in den Developer-Stand übernommen werden, dafür gibt es kein speziles tool +- man kann nicht gut erkennen, welche Kopie von einer anderen Datei abstammt + +_Folie 6_ +**SCM** +- es wedern nur noch Veränderungen gespeichert und nicht die komplette Kopie +- kleine Änderungen brauchen keinen großen Speicherplatz mehr +- die aktuelle Änderung muss Beschrieben/Bezeichnet werdern +- einfache Navigation und Suche --> "tree" Aufbau +- automatische Übernahme in den Developermodus --> branche merge +- Veränderungen und Bezihungen zu vorherigen Codes werden verinfacht in einer Baumdarstellung angezeigt, besser nachzuvollziehen + +_Folie 7_ +centralized vs. distributed SCM + +**centralized SCM** +pro: +- alle Entwickler sehen den selben Standpunkt der Historie +- man sieht, wer gerade an einer Datei arbeitet. Wenn diese Datei schon von jemand anderen bearbeitet wird, kann ich diese nicht bearbeiten. +- einfach zum Speichern und können auch einfacher Backups gemacht werden, da alles auf einem Server gespeichert ist +- unlimitierte Ressourcen von der Firma, da diese einfacher Aufrüsten können + +contra: +- kann auch Offline bearbeitetet werden können aber nicht Hochgeladen werden +- man kann erst mit einer Datei arbeiten, bis der andere diese freigibt +- jeder kann sofort sehen, dass gerade branching and merging stattgefunden hat +- alles kann nur onlline gemacht werden (dateien loggen, erstellen, etc...) + +_Folie 8_ +Jeder Entwickler hat seine eigenen Datien + +**distributed SCM** +pro: +- es braucht keine eigene Serverstruktur +- verschieden remoteseerver können benutzt werden +- alles kann ohne internet stattfinden (Dateien Loggen, erstellen, bearbeiten) +- alles was die entwickler auf ihren Geräten haben sind schon sozusagen Backups, wenn alles zusammengeführt wird ist das Projekt wieder volständig +- meine Arbeitsumgebung stört die andern nicht, da ich meine eigene habe + +contra: +- man hat nur den Stand vom Projekt, den man zuletzt vom Server gezogen hat +- mehrere Personen können eine Datei ändern, was zu konflikten führen kann + +_Folie 9_ +GIT +- git arbeitet nicht mit Dateien, sondern mit Änderungen +- git kann nachverfolgen, wo teile aus anderen Dateien herkommen +- Beschreibungen bekommen eingen "hash" +- branches können einfach in der Historie verschoben werden +- Änderungen werden in der "staging area" gesammelt und gesichert. + +_Folie 11_ +wie sollen commits aussehen? +- commits so kurz wie möglich halten + - kleines set an änderungen sind besser zu überblicken + - einfacher für Git, das es komplikationenpotential gibt + - commits können gezielt in einem anderen branche hinzugefügt werden + - viele einträge sorge für eine bessere HIstorie und eine bessere nochvollziebarkeit + - gute Historie kann man bessern nach bestimmten commits suchen + +- cleancommit ist, wenn der automatisierte Test ohne probleme funkioniert und compiliert + +_Folie 15_ +master branches +- jeder master branches hat eine unendliche lebeszeit +- nur bestimmte personenn können bearbeiten (commits müssen doppelt überschaut werden, da das branche nicht kaputt gehen soll) +- jeder commit muss ausliferbar sein +- der ersto commit ist master und developer +- jeder commit wird getagged und mit eiener versionsnummer versehen +- "--no-ff" gibt an, das jeder branche commited werden muss + +develop branche +- unendliche lebenszeit +- erster commit startet ein projekt +- jeder commit muss auslieferbar sein, damit allen beim kunden funtioniert +- jeder eintwikler darf rein commiten + +release branche +Extra Umgebung zum Testen +- nur bestimmte lebenszeit +- keinen Erneuerungen, nur fixes +- jeder kann bearbeiten + +_Folie 18_ +hotfix branche +- kurze Laufzeit +- wird vom master genommen (letzter commit vom master) +- keien neuen features, nur verbesserungen +- jeder kann mitarbeiten + +_Folie 19_ +- " +- gemommen vom develop + +_Folie 22_ + +vorteile: +- wir sehen, welche Teile zeitgleich entstanden sind +- automatische konfliktauflösung + +nachteile: +- komplexer history tree + +_Folie 23_ +rebase +Wendet jeden commit einzeln an + +vorlteile: +- saubere history graph +- konflliktauflösung ist immer nur für einen commit + - manuell einfacher zu beheben + +nachteile: +- history bietet keiene timeline +- verbraucht mehr speicherplatz als benötigt. + +_Folie 24_ + +rebase benutzen, wenn: +- wenn an noch nicht fertigen features gearbeitet wird +merge benutzen, wenn: + +### Erkenntnis +Commits: +Sollen so kurz wie möglich gehalten werden, da somit eine Bessere History augebaut wird, eine nachverfölgung einfacher ist, Änderungen sind einfacher zu überblicken und führt zu weniger konfliktpotential. + +Es gibt verschidenen Stufen, die ein Programm/ Code durchläuft. +- Master branches sollten funktioniren, da diese direckt an dern Kunden gehen. Diese können auch nur noch von spezielen Personen geändert werden. +- develop brances sind in der bearbeitungen und jeder Entwickler darf diese bearbeiten. Diese Programme haben eine unendliche Laufzeit und sollen auslieferbar sein. +- hotfix branches haben eine kurze Laufzeit und dient dazu Fehler so schnell wie möglich zu fixen. Jeder Entwicker kann bearbeiten. +- releas branches haben auch nur eine begrenzte Laufzeit, damit das Programm von jedem Entwickler getestet und gefixt werden kann. + +### Wiederhlung +Zentralle SCM bieten einen Zentralen Speicherort, wo jeder Entwickler zugrif darauf hat. Code kann immer nur von einer Person bearbitet werden, was nicht zur überschreibung führt aber dadurch wird die Entwiklung vom Code ausgebrembst. Darduch das alles auf einen Server gespeichert wird können besser Backups erstellt werden und die Server werden meist vom Betreib gestelt, wodurch man eigentlich unlimitierte Ressoucen zur Verfügung bekommt. + +Lokale SCM hat den Vorteil, das jeder seine eigenen Entwicklungsumgebung unabhängig von andern Enticklen erstellen kann, da jeder sein eigenes lokales Verzeichnis hat. Jeder kann sein eigenes Repository aktualisieren und sich die Daten von den anderen Ziehen, was diese Hochgeladen haben. Man kann seine Programme Offline bearbeiten aber hat auch vieder den Nachteil, dass andere Zeitgleilch einen Code ändern können, was zu Problemen führen kann.