@ -219,3 +219,173 @@ Das Entwurfsmuster "Nachrüstungsschnittstelle" kann man im Prinzip als eine
Entwurfsmuster sind schwer vorstellbar, da keine konkreten Beispiele gegeben waren. Man kann sich zwar vorstellen was beispielsweise eine abstrakte Fabrik macht, hat aber keine Ahnung wie man das konkret anwenden soll. Ich denke, Codebeispiele würden hier vielleicht eher helfen als verwirren.
Entwurfsmuster sind schwer vorstellbar, da keine konkreten Beispiele gegeben waren. Man kann sich zwar vorstellen was beispielsweise eine abstrakte Fabrik macht, hat aber keine Ahnung wie man das konkret anwenden soll. Ich denke, Codebeispiele würden hier vielleicht eher helfen als verwirren.
---
---
## SU 04 (14.11.2023) - Source Code Management
### Lernziel
**Seminarischer Unterricht:**
SCM:
- "Source Code Management"
- Ermöglicht Zugriff auf verschiedene Stände der Entwicklung
- Ermöglicht es, auf funktionierenden Stand zurückzukehren
- Ermöglicht Vergleich der Entwicklung
- Ermöglicht das Entwickeln von neuen Features, die nicht sofort in den Stable Build kommen sollen
- Erleichtert Zusammenarbeit mit anderen Entwicklern
Einfache Möglichkeiten:
- Lokale Kopien
- Kopien in Zip-Ordnern → Spart Platz
- Kopien auf Netzlaufwerken oder in der Cloud
- Pro:
- Es werden keine Extra-Tools oder Hardware benötigt
- Diff-Tool kann benutzt werden, um Änderungen zwischen Backups zu erkennen
- Con:
- Hoher Festplattenspeicherverbrauch
- Keine "Commit-Message" die Grund für Änderung anzeigt
- öftere Backups brauchen mehr Speicherplatz → Man neigt dazu, seltener Backups zu machen
- Schwer nach spezifischen Änderungen zu suchen
- Zusammenführen von verschiedenen Ständen schwierig
- System für Backup-Namen wird oft nicht eingehalten
Bessere Möglichkeit: SCM
- Speichert nur die Änderungen an Dateien → optimiert für möglichst geringen Speicherverbrauch
- Speicherverbrauch steigt mit Menge der Änderungen → Kleinere Backups sind nicht mehr ineffizient
- Beschreibung des Grunds der Änderung
- Einfache Navigation in Änderungen
- Änderungen an der gleichen Datei von verschiedenen Usern können einfach zusammengefasst werden
- Baumstruktur der Änderungen → nachvollziehbar
Zentralisiert:
- Dateien liegen auf Server, User lädt sich die Dateien zum Bearbeiten herunter
- Dateien die gerade bearbeitet werden sind für andere User gesperrt
- Pro:
- Jeder Commit für jeden sichtbar
- Das Sperren von Dateien bei aktueller Bearbeitung verhindert, dass zwei User die gleiche Zeile bearbeiten
- Leichte Backups durch Server-Admin
- Speicherplatz in Server relativ einfach erweiterbar
- Con:
- Der Server wird benötigt → Extra-Gerät was immer laufen muss
- Wenn ein User vergisst seine Datei wieder freizugeben ist die Datei gesperrt → Problem bei Urlaub, Unfall etc.
- Branches und Merges direkt für alle verfügbar → Auch halbfertiger Code, wird zum Problem wenn andere User darauf aufbauen
- Offline arbeiten nicht möglich
Dezentralisiert (Verteilte Systeme):
- Jeder Entwickler hat eigene History an Änderungen
- Pro:
- Keine zentrale Instanz benötigt, aber möglich → auch mehrere
- Die meiste Zeit kann man offline arbeiten → Online-Zugang nur zum Hochladen wenn man fertig ist
- Jeder Entwickler bildet eine Art Backup
- Lokale Experimente bleiben privat
- Con:
- Lokale änderung ist nicht synchron mit Server → Erst "push" veröffentlicht Änderungen
- Kein Schutz gegen gleichzeitiges Ändern einer Datei von zwei Usern
Git:
- Generelles:
- Entwickelt von Linus Torwalds
- Commits sind änderungsbasiert
- Man kann nur ganze Commits auschecken → Verhindert es, dass zum Beispiel Methoden nur in einer Datei geändert werden
- SHA-Checksum zur Sicherung und Nachverfolgung von Änderungen
- Zweige → Mit Commit gekennzeichnet, mit neuem Commit aktualisiert
- Staging → Eine Art Safe Space, auch wenn man den Zweig wechselt
- Commits:
- Möglichst kleine Commmits reduzieren Potenzial für Konflikte
- Kleine Commits erleichtern Git das Zusammenführen von verschiedenen Änderungen
- Cherry Pick → Ermöglicht es, die Commits von anderen Developern zu übernehmen
- Je kleiner der Commit desto besser nachvollziehbar
Aus dem Seminarischen Unterricht und der Übung kann ich für das Gruppenprojekt das neue Wissen über die Funktionsweise und die Bedienung von Git mitnehmen.
### Wiederholung
Der Release-Branch in Git dient der Vorbereitung einer Software-Version. Er zweigt von einem Commit im Develop-Branch ab. Im Release-Branch werden nur noch Bugs entfernt und gefixt. Die fertige Version landet dann sowohl im Master-Branch als auch im Develop-Branch, damit die Fixes auch da vorhanden sind.