SWC - Eins
SWC - Erste Prüfung
SWC - Erste Prüfung
-
- 1 / 106
-
Lernkarten
Was versteht man unter Merging?
- Zwei Enwicklungsverläufe werden zusammengeführt
- Branch erstellen "git branch xxx"
- Zu Branch wechseln "git checkout xxx"
- Branch erstellen und direkt wechseln "git checkout -b xxxx"
- Branch anzeigen "git branch"
- Branch löschen "git branch -d xxx"
- Branch pushen "git push -u origin xxx"
Wie ist der Ablauf beim Merging?
1) git checkout -b feature-login
2) git add *
3) git commit -m "Feature fertig"
4) git push -u origin feature-login
5) git checkout main
6) git merge feature-login
Was ist der Unterschied zwischen Reset und Restore?
Damit können:
- Änderungen, welche noch nicht commited sind, wieder rückgängig gemacht werden
- Ältere Versionen einer Datei wiederhergestellt werden
- Änderungen, die schon committed sind rückgängig machen
Mit "git log" wird Commit History angezeigt!
"git HEAD" zeigt wo man im Repo ist (Zeigt auf Commit)
Restore: Working Copy und Staging ändern
Reset: Index/Commit-Zeiger ändern
Revert: Neuer Commit wird erstellt
Wie kann man eine Datei aus einem alten Commit zurückholen?
- git restore -s <commit> file
Wie kann man das komplette Projekt zurücksetzen?
- git clone <url>
- git reset --hard <commit>
Wie kann man eine Datei aus dem Staging entfernen?
- git restore --staged file
Was sind Configuration-items?
Elemente eines Systems, das verwaltet, versioniert und nachverfolgt wird.
Welche Configuration Items werden im Git gespeichert und welche nicht?
Git: Build-Dateien(pom.xml), Source-Code, Test-Code, Dokumentation(readme.md), Dockerfile, CI-Config, DB-Schema, Ressourcen(.jpg)
Nicht im Git: Logs, Output, *.class, /target, Test-Report*.xml, Container, Binaries -> Artefakte
Was gehört unter Versionskontrolle und was nicht?
- Alles wo Arbeit drin steckt gehört in ein Repo
- Alles was generiert werden kann, soll nicht unter Versionsverwaltung gestellt werden
Was macht git restore -s <commit> liesmich.txt
- Nur diese eine Datei wird geändert, Rest vom Projekt bleibt gleich
Was macht git reset --hard <commit>?
Zeit zurückdrehen (Ganzer Zustand)
- Alles wird zurückgesetzt (Dateien + History)
Was macht git revert?
Macht einen alten Commit "rückgängig", aber sauber
- Neuer Undo-Commit wird erstellt
git reset 7 vs git reset --hard 7
git reset 7 = --mixed, standard:
HEAD geht zurück auf Commit 7, Staging Area wird angepasst, Working Directory bleibt unverändert
git reset --hard 7
HEAD geht zurück auf Commit 7, Staging Area wird angepasst, Working Directory wird auch überschrieben (f7)
Was bedeutet New file: test.txt in Staging Area?
- Datei befindet sich in der Staging Area (Staged/tracked)
Was sind die Goldenen Regeln bezüglich Rebase?
- Rebase niemals auf öffentliche Branches (Main/Dev) oder gepushten Branches
Weil: die History verändert wird, andere haben plötzlich andere Commits
- Chaos beim Pullen
Was versteht man unter Interactive Rebase?
git rebase -i HEAD~3
- Man kann Commits zusammenfassen (squash)
- Commit Messages ändern
- Commits löschen
- Reihenfolge ändern
+ saubere Commit History
+ ideal vor dem Push
+ Perfekt für "aufräumen"
Welche Branching Workflows gibt es?
1) Trunk-based
2) Feature Branch Workflow
3) Gitflow
Was sind die Vor- und Nachteile von Trunk Based Development?
Vorteile:
- Wenige Merge Konflikte
- Schnelle Integration
- Ideal für CI/CD
- immer lauffähiger Code
Nachteile:
- braucht gute Tests, sonst herrscht Chaos
- Disziplin im Team nötig
- grosse Features schwieriger zu isolieren
Was sind die Vorteile und Nachteile von Feature Branch Workflow?
Vorteile:
- Saubere Trennung von Features
- Paralleles Arbeiten möglich
- Weniger Risiko für main-branch
Nachteile:
- Merge-Konflikte möglich
- Branches können veralten
- Integration passiert später
Was sind die Vor und Nachteile von Gitflow?
Vorteile:
- klare Struktur
- gut für Releases
- stabile Produktion
- gut für grosse Projekte
Nachteile:
- sehr komplex
- viele Branches -> Overhead
- langsamer Entwicklungsprozess
- schlecht fr CI/CD
Wie behebt man ein Mergekonflikt?
Mergekonflikt wird direkt erkannt -> Wechselt in Merge-Modus, es wird erwartet, dass der Mergekonflikt jetzt gelöst wird...
1) git status prüfen -> Beide modified
2) Datei öffnen
3) Umschreiben
4) Datei als gelöst melden "git add readme.md"
5) git commit readme.md "Mergekonflikt gelöst"
Was gehört alles in einen Build?
- Automatisches Kompilieren
- Automatisches Durchführen von Tests
- Auslieferbares Artefakt erstellen (JAR, WAR, EXE)
Welchen Umfang haben die meisten Builds?
- Artefakte von vorherigen Build bereinigen (clean)
- Auschecken aller erforderlichen Files aus einem Repo (checkout)
- Kompilieren aller Source-Files (Prod + Tests) (compile)
- Ausführen von Unit-Tests (JUnit) (test)
- Ausführen von einfachen Metrikmessungen (coverage)
- Generierung von API-Dokumentationen (javadoc:javadoc)
Was sind die Aufgaben von Maven?
- Automatisches Bauen
- Automatische Tests durchführen
- Wartung und Fehlerursache durch manuelles verringern
- Code Qualität verbessern
- Reporting/Dokumentation (z.B. Sites)
- Dependencies verwalten
Was sind die Grundprinzipien von Maven?
1) Convention over Configuration (CoC):
- Es muss wenig selbst konfiguriert werden, da viele Standardkonfigs vorgegeben sind
- Standardverhalten (Lifecycle) ist fix
2) Declarative Configuration:
- Es muss kein Code geschrieben werden, sondern man beschreibt was passieren soll (Ablauf)
3) Stabil und Konservativ:
- Maven ändert sich wenig und ist zuverlässig
- Grosse Plugins Community
Welche Lifecycles gibt es?
1) Default
2) Clean //Löscht target/
3) Site //Zuständig für Dokumente/Reporting etc
Welche Phasen gibt es im Default Lifecycle?
1) validation -> Prüft, ob alle notwendigen Ressourcen vorhanden sind
2) compile -> Kompiliert den Source-Code (in src/main/java und src/test/java) und erstellt .*class in target/classes
3) test -> Führt Unit-Tests durch -> (src/test/java) -> Reporting in target/surefire-reports
4) package -> Erstellt ausführbares File (Artefakt) -> JAR/WAR/EXE in target/*.jar
5) verifiy -> Führt zusätzliche Checks aus (Integrationstest, Checklist etc).
6) install -> Installiert lokale Artefake ins lokale Repo -> ~/.m2/repository
7) deploy -> Veröffentlicht Artefakte in Remote-Repo
Welche Phasen hat der Clean LifeCycle?
- pre-clean (Aktionen vor dem löschen)
- clean (Löscht target /Build-Ordner)
- post-clean (Aktionen nach dem löschen)
Welche Phasen hat der site Lifecylce?
- pre-site (Vorbereitung der Dokumentation)
- site (erstellt Projekt Website) -> HTML in target/site/*
- post-site (Nachbearbeitung)
- deploy-site (Veröffentlicht Website)
Was sind Artefakte und welche gibt es?
Alle erzeugden Ergebnisse eines Build-Prozeses:
1) .class (HauptCode) -> Phase compile -> target/classes/
2) .class (TestCode) -> Phase test-compile -> target/test-classes/
4) Test-Report/xml/txt -> Phase test -> target/surefire-reports/
5) .jar / .war / .exe -> Phase package -> target/*
6) Zusätzliche Reports -> Phase verify -> target/*
7) .jar + .pom -> Phase install -> ~/.m2/repository
8) .jar + .pom -> Phase deploy -> Remote-Repo
Welche Dependency-Scopes gibt es? //Wann ist die Dependency verfügbar?
- compile (default) -> überall verfügbar und im Artefakt enthalten
- provided -> Wird zur Laufzeit von der Umgebung bereitgestellt
- runtime -> Wird zur Laufzeit benötigt, nicht beim kompilieren
- test -> Nur für Tests verfügbar
- system -> Wie provided, aber lokal
- import -> Importiert BOMs in dependency management
Welche wichtigen Maven Plugins gibt es?
1) Maven Compiler Plugiin -> Kompiliert Java-Code
2) Maven surefire Plugin -> Führt Unit-Tests aus
3) Maven jar Plugin -> Erstellt jar-Datei <artifactId>_<version>*.jar
4) Maven clean Plugin -> Löscht Build Artefakte
5) Maven site Plugin -> Erstellt Website/Reporting
6) Maven install Plugin -> Installiert Artefakte Lokal ~/.m2/repository
7) Maven deploy Plugin -> Pusht Artefakte in Remote-Repo
Welche wichtige Maven Goals gibt es? plugin:goal
plugin:goal
1) compiler:compile -> Kompiliert Hauptcode /src/main/java
2) compiler:test-compile -> Kompiliert TestCode /src/test/java
3) surefire:test -> Führt Unit-Tests aus
4) jar:jar -> Erstellt eine Jar-Datei
5) clean:clean -> Löscht target/ Ordner
6) install:install -> Installiert Artefakte Lokal in ~/m2.repository
7) deploy:deploy -> lädt Artefakte in das Remote-Repo
8) site:site -> Erstellt Reports
9) javadoc:javadoc -> Erstellt HTML-Dok in /target/site/apidocs
Wofür steht Crisp?
C - Complete (Build enthält alles was nötig ist, alle Dependencies definiert)
R - Repeatable (Build ist immer gleich reproduzierbar) - gleicher Input = gleicher Output, Version Control = Zeitmaschine
I - Informative (Build liefert nützliche Infos) - Logs, Reports etc (Hilft beiim Debuggen)
S - Schedulable (Build läuft automatisiert) - CI/CD, jederzeit ausführbar
P - Portable (Build läuft überall gleich) - unabhängig von Umgebung