Version 1.0.0 (2025-02-18): Version 1.0.0
10
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
**/*.class
|
||||
**/*.ctxt
|
||||
**/*.sh
|
||||
repo.adoc
|
||||
repo_subtree.adoc
|
||||
*.~lock
|
||||
/alt
|
||||
/hide
|
||||
Gemfile
|
||||
Gemfile.lock
|
||||
61
AnwendungsszenarienFBU.adoc
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
= Anwendungsszenarien Materialtausch
|
||||
:author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
include::kapitel-settings.adoc[]
|
||||
|
||||
Für den Informatikunterricht gibt es eine Vielzahl von Fortbildungsmaterialien, die zum Teil von den Fortbildnern entwickelte Software oder Programmieranwendungen für den Unterricht enthalten. Diese werden fortlaufend weiterentwickelt und Fehler bereinigt.
|
||||
|
||||
GIT bietet die Möglichkeit, eine professionelle Versionsverwaltung dafür zu realisieren. Alle Lehrenden haben nun jederzeit die Möglichkeit, sich über neue Versionen zu informieren und die neuste Version abzurufen.
|
||||
|
||||
Lehrende soll auf strukturierte Weise Projekte aus der Lehrerfortbildung weiterentwickeln können und so zu der Weiterentwicklung der Unterrichtsmaterialien beitragen können.
|
||||
|
||||
Auch eigene, erprobte Projekte sollen von jedem Lehrenden anderen Lehrenden angeboten und getauscht werden können.
|
||||
|
||||
All dies kann mit GIT realisiert werden.
|
||||
|
||||
== Dateitypen
|
||||
|
||||
GIT arbeitet textbasiert. Daher bieten sich textbasierte Dateiformate an, um eine effektive Versionskontrolle gewährleisten zu können.
|
||||
|
||||
=== Software
|
||||
Bei Softwareprojekten ist dies kein Problem, da diese ohnehin alle textbasiert sind.
|
||||
|
||||
=== Skripte & Arbeitsblätter
|
||||
Als Format für Skripte sollte in Zukunft ASCII-Doc verwendet werden. ASCII-Doc bietet die notwendigen Formatierungsbefehle für die üblichen Textgestaltung und entwickelt sich zu einen Standard weiter. Markdown wäre eine Alternative, die aber aufgrund vieler verschiedener Markdown-Dialekte problematischer ist. Außerdem werden Dokumente im ASCII-Doc Format auf Git-Camp BW automatisch gerendert und formatiert angezeigt.
|
||||
|
||||
=== Präsentationen
|
||||
Präsentationen können durch reveal.js einfach im HTML-Format erstellt werden. Dadurch ist eine Versionskontrolle mit GIT möglich. Die Darstellung kann auf jedem Endgerät erfolgen, ist responsive-fähig. Die Präsentation kann duch direkt auf der Webseite von Git-Camp BW angezeigt werden. Ohne Download steht immer die neuste Version bereit.
|
||||
|
||||
== Szenarien für den Materialtausch
|
||||
|
||||
=== Fortbildner untereinander
|
||||
Für jedes Projekt gibt es einen oder mehrere *hauptverantwortliche Fachberatende*. In einem Development-Branch entwickeln diese die Projekte und arbeiten Änderungswünsche ein.
|
||||
|
||||
Sie besitzen Lese- und Schreibrechte auf den Repositorys, die auf dem *Git Camp Fortbildner* angelegt werden. Alle anderen FBUs können Repositorys forken und Verbesserungen einbauen. Die Hauptverantwortlichen entscheiden, ob diese übernommen werden.
|
||||
|
||||
Die Hauptverantwortlichen arbeiten größere Änderungen in separaten Branches ein und bitten andere FBU um die Begutachtung der Änderungen. Ggf. wird der Branch mit dem Hauptbranch gemerged.
|
||||
Kleinere Bugfixes erfolgen auf dem Hauptbranch.
|
||||
|
||||
Davon abgeleitet wird ein Branch zum Veröffentlichen, der dann mit Versionsnummern versehen wird. Jede zu veröffentliche Version wird in ein zweites Repository kopiert, das einen Deployment-Branch enthält und auf dem *GitCamp Lehrerfortbildung* verfügbar gemacht wird, so dass alle Lehrpersonen darauf zugreifen können. Dazu müssen die Repositorys so eingestellt werden, dass die GRUPPE XXX lesenden Zugriff auf das Repository hat.
|
||||
|
||||
Alle Arbeitsversionen während des Development-Prozesse bleiben daher den Lehrenden verborgen. Daher sind Urheberprobleme von Zwischenversionen ein geringeres Problem.
|
||||
|
||||
=== Fortbildner - Lehrer
|
||||
Die Materialien aus Lehrerfortbildungen (insbesondere Softwareprojekte) werden von den Fachberatern im *GitCamp Lehrerfortbildung* bereit gestellt. Das Repository XXX enthält eine Übersicht über alle bereitgestellten Projekte mit der Zuordnung zu den möglichen Einsatzbereichen. Links verweisen auf die Repositorys mit den dazugehörigen Materialien.
|
||||
|
||||
Jede Lehrperson sollte diese Repositorys
|
||||
|
||||
a. clonen, wenn sie die Projekte nutzen möchte und ihren SuS zur Verfügung stellen möchte. Dazu fügt sie dem Projekt ein weiteres Remote-Verzeichnis hinzu, das im *schuleigenen
|
||||
GitCamp* liegt und pushed dort das Projekt.
|
||||
|
||||
b. forken, wenn sie vor hat, das Projekt zu verändern (Verbesserungen einzuprogrammieren) und diese Veränderungen der Allgemeinheit zur Verfügung zu stellen. Nachdem die Veränderungen eingefügt wurden, stellt die Lehrperson einen Pull-Request für das ursprüngliche Repository mit einer aussagekräftigen Beschreibung, welche Änderungen eingefügt wurden. Der betreuende Fachberater entscheidet, ob die Änderungen in das Originalprojekt übernommen werden soll.
|
||||
|
||||
*Fehler melden:*
|
||||
Finden Lehrpersonen Fehler (Schreibfehler, inhaltliche Fehler, Bugs) in den Materialien können sie Issues im normalen Projekt anmelden, so dass der betreuende Fachberater diese korrigieren kann. Auch Änderungswünsche können auf diesem Wege angezeigt werden.
|
||||
|
||||
|
||||
=== Lehrer - Lehrer
|
||||
|
||||
Jede Lehrperson hat jederzeit die Möglichkeit eigene Repositorys im *GitCamp Lehrerfortbildung* anzulegen. Sie kann einzelnen anderen Lehrpersonen Leserechte oder allen Lehrpersonen (GRUPPE XXX) auf diese Repositorys einräumen, so dass diese die Repositorys für den eigenen Unterricht nutzen sollen.
|
||||
|
||||
Soll alle Lehrpersonen Zugriff erhalten, müssen die Fachberater informiert werden und gebeten werden, einen Link auf der Übersichtsseite mit allen Projekten zu erstellen.
|
||||
|
||||
102
AnwendungsszenarienUnterricht.adoc
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
= Anwendungsszenarien Unterricht
|
||||
:author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
include::kapitel-settings.adoc[]
|
||||
|
||||
== SuS versionieren lokal
|
||||
|
||||
*Einsatzbereich: IMP ab Klasse 8*
|
||||
|
||||
.Voraussetzungen
|
||||
- kein Account bei einem GIT Hoster notwendig
|
||||
- Stage, Commit, Anlegen eines Repositories, Check out
|
||||
|
||||
Oft haben SuS Probleme, ihre Dateien ordentlich zu verwalten. Oft existieren mehrere Versionen in verschiedenen Ordnern, die Arbeit eines Tages wird gar nicht gespeichert oder durch ungwollte Änderungen wird der Code nicht mehr ausführbar. Den SuS fällt es schwer, diesen Fehler zu korrigieren, da oft unbeabsichtig notwendiger Code gelöscht wurde, den die SuS nicht wiederherstellen können.
|
||||
|
||||
Durch die Verwendung von GIT von Beginn des Programmierunterrichts an, werden diese Probleme minimiert. Es muss zur Routine werden, am Ende jeder Arbeitsphase / Unterrichtsstunde einen Commit zu machen. Dabei wird die Arbeit des Tages rekapituliert und der aktuelle Arbeitsstand im Commit festgehalten.
|
||||
|
||||
Bei ungewollte Änderungen kann jederzeit zum Arbeitsstand des Vortages zurückgekehrt werden oder die Unterschiede zum Vortag angezeigt werden.
|
||||
|
||||
Die Sus initialisieren dazu einen Ordner als GIT-Repository. In diesem bearbeiten sie ihr Projekt und speichern die aktuelle Version am Ende jeder Stunde. Dazu werden alle Änderungen der Stunde mit einem entsprechenden Kommentar commited.
|
||||
|
||||
Solange die SuS nur in der Schule am Projekt arbeiten, ist es nicht erforderlich das Repository auf Git Camp zu pushen. Dadurch ist es unmöglich Versionskonflikte zu bekommen. Die SuS werden auf sehr einfache Art und Weise an GIT herangeführt.
|
||||
|
||||
== Lehrperson stellt Material per GIT bereit, SuS versionieren lokal
|
||||
|
||||
*Einsatzbereich: IMP ab Klasse 8*
|
||||
|
||||
.Voraussetzungen
|
||||
- öffentlich verfügbares Repository oder schuleigene Git Camp Instanz mit Zugängen für die Schüler
|
||||
- Clonen, Pull, Stage, Commit, Check out, (Rebase, Fetch)
|
||||
|
||||
Die Lehrperson stellt ein Repository online für Schüler zur Verfügung. Die Schüler clonen dieses Repository lokal in der Schule und arbeiten lokal. SuS machen am Ende der Stunde einen Sicherungsschritt (commit).
|
||||
|
||||
Dabei können die Unterschiede zur Vorversion sichtbar gemacht werden. Außerdem ist es möglich, zu einer Vorversion zurückzukehren. Dies entspricht den Möglichkeiten des ersten Anwendungsszenarios. Hier kommt im ersten Schritt ein Clonen eines vorhanden Repositorys hinzu.
|
||||
|
||||
*Variante Update bei Fehler:*
|
||||
|
||||
Gegebenenfalls kann die Lehrperson ein Update des Repository zur Verfügung stellen. Die Sus fetch/pullen die Neuerungen und führen diese mit ihrer Version so zusammen, dass das Update die Originalvorlage ersetzt und nachträglich die Änderungen der SuS angewendet werden. Dies bezeichnet man als *Rebase*. Dadurch vermeidet man den Versionskonflikt, der entstehen kann, wenn beide Änderungen (Update der Lehrperson und eigene Arbeit der SuS) gleichberechtigt zusammengeführt werden würden (merge).
|
||||
|
||||
In der Regel betreffen die Änderung an der Vorlage durch die Lehrkraft aber ohnehin Bereiche, in denen die SuS nicht selbst programmiert haben. Daher sollten selbst bei Merge nur selten Versionskonflikte auftreten.
|
||||
|
||||
*Variante Lösungen zur Verfügung stellen:*
|
||||
|
||||
Die Lehrperson kann die Lösungen der Aufgaben im Repository als Commit bereitstellen. Die SuS pullen die neue Variante und mergen mit ihrer Lösung. Die SuS können dabei ihre Version mit der Lehrerversion vergleichen und ggf. durch Musterlösung ersetzen. Dafür ist aber eine Konfliktbehandlung beim Mergen erforderlich.
|
||||
|
||||
== SuS versionieren online (SuS arbeiten zu Hause und in der Schule)
|
||||
|
||||
*Einsatzbereich: IMP ab Klasse 10*
|
||||
|
||||
.Voraussetzungen
|
||||
- schuleigene GIT-Camp Instanz mit Zugängen für SuS
|
||||
- Fork, Clone, Stage, Commit, Pull, Push
|
||||
|
||||
Die Lehrperson legt Accounts für die SuS auf der schuleigenen GIT Camp Instanz an und stellt dort Material in einem Repository. Die SuS brauchen einen lesenden Zugriff auf das Repository.
|
||||
|
||||
Die SuS forken dieses Repository direkt in der Web-Oberfläche von GIT Camp. Dadurch haben sie einen eigenen Ableger der Projekts, bei dem sie volle Zugriffsrechte haben. Sie sollten auch der Lehrperson volle Zugriffsrechte (zumindest Leserechte) einräumen.
|
||||
|
||||
Es ist alternativ auch möglich, das Repository der Lehrkraft zu clonen. Grundsätzlich verwendet man einen Fork, wenn man beabsichtigt ein Projekt eigenständig weiterzuentwickeln, welches unabhängig vom Original existiert. Clone wird verwendet, wenn man in einem Team gemeinsam an einem Repository arbeitet und einzelne Teile des Projekts bearbeitet. Daher ist in diesem Szenario ein Fork sinnvoller, auch wenn ein Clone genauso benutzt werden könnte.
|
||||
|
||||
Das eigene Repository clonen die SuS sowohl in der Schule als auch zu Hause und führen am Ende jeder Stunde ein Commit mit anschließendem Push durch, so dass sie zu Hause mit einem Pull auf die aktuelle Version zugreifen können.
|
||||
|
||||
Machen Sie den SuS deutlich, dass es sehr wichtig ist, immer einen Pull durchzuführen, bevor man anfängt zu arbeiten. Vergessen die SuS dies, kann es Änderungen in der Schule und zu Hause geben, die im Konflikt zueinander stehen. Die SuS merken dies daran, dass sie die zweite Änderung nicht mehr pushen können. GIT meldet die Konflikt und verlangt zunächst ein Pull/Merge bevor die nächste Push Aktion möglich ist. Es muss also aufwendig ermittelt werden, welche Version die richtige ist (Conflict Solver), was während einer Unterrichtsstunde nicht immer so einfach ist.
|
||||
|
||||
Die Lehrperson hat über die GitCamp-Webseite jederzeit Einblick in den Stand der Schülerrepositorys. Sie sieht alle Forks im eigenen Projekt.
|
||||
|
||||
Die Lehrperson kann im eigenen Projekt lokal weitere Branches für jeden SuS anlegen und den tracking branch auf die Repositorys der SuS legen. Dann kann die Lehrperson den aktuellen Stand der Schülerprojekte jederzeit lokal anschauen und überprüfen.
|
||||
|
||||
Bei Fehlern hat die Lehrperson die Möglichkeit die Änderungen direkt am Code durchzuführen und Kommentare dazu beim Commit unterzubringen. Anschließend push die Lehrperson die Änderungen. Die Sus sehen die Änderungen, die von der Lehrperson vorgenommen wurden und lesen die Kommentare. Auch hier ist es dringend geboten, dass die SuS zunächst ein Pull durchführen, bevor sie selbst weiterarbeiten. Ansonsten können auch hier Konflikte auftreten. Da die Lehrkraft die eigenen Änderungen aber kennt, sind sie meist leichter zu lösen.
|
||||
|
||||
*Variante: Kommentieren von Schülerprojekten:*
|
||||
In GitCamp hat eine Lehrerin automatisch Leserechte auf den Repos der Schülerinenn. Daher kann eine Lehrerin jederzeit den Arbeitsstand der Schülerinnen ansehen. Dies kann sie entweder online oder indem sie einen lokalen Clone anlegt. Dazu müssen die Repos der Schülerinnen nicht als Fork des Lehrerprojekts entstanden sein.
|
||||
|
||||
Statt die Schülerinnenprojekte nun zu ändern und zu pushen, kann die Lehrerin den Schülerinnen auch einen Issue im online-Repository eintragen. Dieser Issue kann an eine bestimmte Zeile im Code gebunden werden. Dazu lässt sich die Lehrerin im Gitcamp den Quellcode einer Datei anzeigen, so dass links Zeilennummern zu sehen sind (Quellcode muss explizit rechts oben gewählt werden!). Dann kann in der fehlerhaften Zeile ganz links geklickt und ein Issue zu dieser Zeile erstellt werden.
|
||||
|
||||
image::bilder/BilderGitOnline/IssueInZeile.png[]
|
||||
|
||||
|
||||
== Zusammenarbeit in Gruppenprojekten
|
||||
|
||||
*Einsatzbereich: BF in der Kursstufe*
|
||||
|
||||
.Voraussetzungen
|
||||
- schuleigene GIT-Camp Instanz mit Zugängen für SuS
|
||||
- Clone, Stage, Commit, Push, Pull, Merge
|
||||
|
||||
Eine einfache Version der Zusammenarbeit von zwei (mehreren) Schülerinnen kann durch die Verwendung eines gemeinsamen online Repositorys erreicht werden. Dabei legt eine Schülerin das Online-Repo in Gitcamp an und räumt den anderen Teammitgliederinnen Lese- und Schreibrechte darauf ein.
|
||||
|
||||
Das ganze Team startet mit einer gemeinsamen Vorlage (ggf. ein Fork oder Clone eines Lehrerinnen-Repositorys). Diese Vorlage wird allen Teammitgliederinnen gecloned, damit es lokal auf ihrem Rechner vorliegt. Gleichzeitig arbeiten sie an verschiedenen Aspekten des Projekts. Die geringsten Konflikte erzielt man, wenn jedes Teammitglied an einer eigenen Datei (Klasse) arbeitet.
|
||||
|
||||
Nach Abschluss eines Arbeitsschrittes wird die eigene Arbeit durch einen Commit lokal gesichert. Bevor der Arbeitsstand gepusht werden kann, muss vor ein Pull durchgeführt werden, da die anderen Teammitgliederinnen auch Änderungen vorgenommen haben könnten. Aufgrund des gleichzeitigen Arbeitens wird ein Merge der beiden Änderungen notwendig sein. Es sollte stets die Option "Merge to working tree" gewählt werden. Nachdem alle Merge-Konflikte beseitigt sind, das Projekt erneut getestet wurde, wird das zusammengeführte Projekt durch einen weitere Commit gesichert und dann gepusht. Der Push ist nun möglich, da das zusammengeführte Projekt ein Nachfolger der zuerst gepushten Änderungen ist.
|
||||
|
||||
|
||||
*Einsatzbereich: LF in der Kursstufe*
|
||||
|
||||
.Voraussetzungen
|
||||
- schuleigene GIT-Camp Instanz mit Zugängen für SuS
|
||||
- Fork, Clone, Stage, Commit, Push, Pull, Merge
|
||||
|
||||
Die Rohversion eines Projektes wird ggf. immer noch von der Lehrperson per Repository bereit gestellt. Ein Mitglied wird zum "Sprecher" der Gruppe. Dieser forked das Lehrerprojekt oder legt ein eigenes Repository an, wenn es keine Vorlage gibt. Er nimmt alle anderen Mitglieder der Gruppe als "Developer" in das Repository auf. Alle Gruppenmitglieder clonen diesen Fork und haben damit ihr lokalen Versionen.
|
||||
|
||||
Die Gruppenmitglieder arbeiten lokal, committen ihr Änderungen und pushen sie danach. Ab dem Push des zweiten Gruppenmitglieds ist ein Zusammenführen der verschiedenen Änderungen erforderlich. Arbeiten die SuS an verschiedenen Dateien ist dies problemlos möglich. Bei Änderungen an gleichen Dateien müssen die Änderungen gemerged werden und ggf. Konfiktbehandlung durchgeführt werden.
|
||||
|
||||
Die SuS könnten auch in verschiedenen Branches arbeiten und erst am Ende ihre Branches zu einem gemeinsamen Projekt zusammenführen. Das Arbeiten mit mehreren Branches setzt aber ein sehr diszipliniertes Arbeiten voraus. Sobald einmal ein falscher Branch aktiv ist, wird es schwierig die Fehler wieder zu korrigieren. Daher ist nur bei sehr fitten SuS zu empfehlen, dieses Konzept einzuführen.
|
||||
75
Asciidoc.adoc
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
ASCII-Doc
|
||||
|
||||
AsciiDoc ist ein leichtgewichtiges Markup-Format, das speziell entwickelt wurde, um Dokumentationen zu erstellen. Es ist einfach zu schreiben und zu lesen, sowohl im Rohformat als auch im endgültigen gerenderten Format. AsciiDoc-Dateien können in verschiedene Ausgabeformate wie HTML, PDF, DocBook und andere umgewandelt werden, was es zu einem flexiblen Werkzeug für Entwickler, Autoren und auch für Lehrer macht.
|
||||
|
||||
Sinn und Vorteile von AsciiDoc:
|
||||
Einfachheit und Lesbarkeit: AsciiDoc ist textbasiert und leicht zu schreiben, was es ideal für die Zusammenarbeit und Versionskontrolle (durch GIT) macht. Der Text bleibt auch ohne Formatierung leicht lesbar.
|
||||
Flexibilität: AsciiDoc kann in verschiedene Ausgabeformate konvertiert werden, was es zu einem vielseitigen Werkzeug für die Dokumentation in verschiedenen Kontexten macht.
|
||||
Vollständige Dokumentation: Es unterstützt fortgeschrittene Dokumentationsfunktionen wie Tabellen, Listen, Quellcode-Hervorhebung, Bilder und vieles mehr.
|
||||
Integration in Entwicklungstools: AsciiDoc ist oft in Entwicklungsumgebungen (z. B. auch GitCamp) integriert und kann leicht in Projekten verwendet werden, die auf Softwareentwicklung fokussiert sind.
|
||||
|
||||
Nachteil:
|
||||
Es ist unmöglich exakte Positionen von Texten oder Bildern auf einer Seite anzugeben. Daher ist es für klassische Arbeitsblätter in der Schule nur bedingt geeignet.
|
||||
|
||||
Wir streben daher an, zukünftiges Unterrichtsmaterial im ASCII-Doc Format zu veröffentlichen. Ein Gesamt-Export als pdf wird zusätzlich bereitgestellt.
|
||||
Sie können aber auch einzelne Kapitel in ein pdf-Dokument überführen. In jedem Dokument können am Anfang einige Einstellungen vorgenommen werden. Sie können entscheiden, ob das erzeugte pdf-Dokument die Kommentare für Lehrer enthalten soll oder nicht. Gleiches gilt für die Lösungen. In der Tablet-Version wird ausreichend Platz direkt nach den Aufgaben gelassen, dass die Schülerinnen und Schüler ihre Lösungen direkt in das Dokument hineinschreiben können.
|
||||
|
||||
Im Hauptdokument können Sie außerdem wählen, welche Kapitel integriert werden soll. Damit können Sie Ihren Unterricht individuell gestalten.
|
||||
|
||||
Grundlegende Formatierungen in AsciiDoc
|
||||
Hier sind einige grundlegende Formatierungen, die häufig in AsciiDoc verwendet werden:
|
||||
|
||||
Überschriften:
|
||||
Überschriften werden durch ein oder mehrere Gleichheitszeichen `=` gefolgt von einem Leerzeichen und dem Titel markiert.
|
||||
Absätze:
|
||||
Ein normaler Textabsatz wird einfach durch eine leere Zeile vom vorhergehenden und nachfolgenden Text getrennt. Eine neue Zeile bekommt man durch ein Leerzeichen gefolgt von einem `+` am Ende einer Zeile.
|
||||
Fettschrift und Kursivschrift:
|
||||
Text kann fett oder kursiv formatiert werden, indem er in Sternchen oder Unterstriche eingeschlossen wird.
|
||||
Listen:
|
||||
Ungeordnete Listen werden mit einem Sternchen `*` vor jedem Listenpunkt eingeleitet. Eine Unterliste kann mit einem zweiten Sternchen erzeugt werden. Wichtig ist, dass die Zeile vor und nach der Liste leer sein muss.
|
||||
Geordnete Listen werden mit einem Punkt eingeleitet. Auch hier können Unterebenen mit mehreren Punkten gekennzeichnet werden.
|
||||
Links:
|
||||
Eine URL wird automatisch als Link interpretiert. Steht hinter der URL ein `[` und schließt sich mit einem `]`, wird der Text zwischen den eckigen Klammern als Linktext interpretiert.
|
||||
Bilder:
|
||||
Bilder können mit dem `image::`-Schlüsselwort eingebunden werden. Danach muss der Name des Bildes folgen.
|
||||
Codeblöcke:
|
||||
Codeblöcke können mit drei Backticks ````` oder durch Einrücken mit vier Leerzeichen erstellt werden.
|
||||
console.log("Dies ist ein Codeblock");
|
||||
|
||||
Tabellen:
|
||||
Tabellen werden durch `|===` eingeleitet und beendet. Innerhalb der einzelnen Zeilen werden die Zellen durch `|` getrennt.
|
||||
|
||||
Name Alter Beruf
|
||||
Max 29 Entwickler
|
||||
Anna 34 Designerin
|
||||
|
||||
Genauere Informationen gibt es bei docs.asciidoctor.org/asciidoc/latest/ .
|
||||
|
||||
Verwendung von ASCII-Doc
|
||||
ASCII-Doc-Texte können sie mit einem einfachen Texteditor editieren. Für größere Änderungen empfiehlt sich die Verwendung von [Visual Studio Code](https://code.visualstudio.com/) mit der Extension Asciidoc oder von [AsciidocFX](https://github.com/asciidocfx/AsciidocFX). Beide Programme zeigen die formatierte Ausgabe fortlaufend während der Bearbeitung des Codes an. Möglicherweise machen dabei die mathematischen Formeln oder die Diagramme Probleme, die Erweiterungen der normalen Asciidoc Syntax darstellen. Beim Konvertieren in pdf-Dokumente werden diese aber korrekt dargestellt.
|
||||
|
||||
Konvertierung
|
||||
Die Konvertierung in pdf-Dokumente ist bei Verwendung von mathematischen Formeln nicht ganz einfach, da die notwendige Erweiterung nur in einer bestimmten Linux-Version läuft. Sie funktioniert aber gut, wenn man den vorinstallierten Docker-Container verwendet.
|
||||
|
||||
Installieren Sie dazu das [Docker-System](https://docs.docker.com/get-docker/). Suchen Sie innerhalb des Docker-Programms nach dem Image asciidoc/docker-asciidoc und laden Sie es herunter. Unter Windows starten Sie dann in einer Powershell das Docker-Image:
|
||||
```
|
||||
docker run -it -v F:/informatik/KuenstlicheIntelligenz/MLGit:/documents/ asciidoctor/docker-asciidoctor
|
||||
```
|
||||
Dabei wird in diesem Beispiel der Ordner F:/Informatik/KuenstlicheIntelligenz/MLGit mit dem Docker-Container verbunden und steht dort im Standard-Verzeichnis /documents zur Verfügung.
|
||||
|
||||
Mit dem folgenden Befehl wird dann das .adoc-File in ein pdf-Dokument übersetzt:
|
||||
```
|
||||
asciidoctor-pdf -R "." -o "maschine-learning-schueler.pdf" -a allow-uri-read -a imagesoutdir=./.asciidoctor/stem -r asciidoctor-diagram -r asciidoctor-mathematical machine-learning.adoc
|
||||
```
|
||||
|
||||
Tippfilter
|
||||
|
||||
In Schülerprogrammen werden wir außerdem Tippfilter-Auszeichnungen verwenden, die es erlauben, aus der fertigen Version eine Rohversion für die Schüler zu erstellen. Sie können die Rohversion automatisiert durch das Batchfile "Erzeuge-Roh.bat" erstellen lassen.
|
||||
|
||||
Alternativ können Sie die Erzeugung auch selbst mit Hilfe der _tippfilter.jar_ im Unterordner _tippfilter_ starten. Ausgangsordner für den folgenden Befehl ist der Ordner _perzeptron_:
|
||||
```
|
||||
java -jar ../tippfilter/tippfilter.jar or=./java-perzeptron de=./perzeptron-rohversion zielgruppe=roh configfile=bluej.tippfilter
|
||||
```
|
||||
Erläuterungen zum Tippfilter finden Sie in der Hilfedatei im Ordner _tippfilter_.
|
||||
|
||||
|
||||
32
GIT.adoc
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
= GIT in der Schule
|
||||
:authors: Thomas Schaller <thomas.schaller@zsl-rska.de>, +
|
||||
Thomas Niesenhaus <thomas.niesenhaus@zsl-rska.de>, +
|
||||
Patrick Gerth <patrick.gerth@zsl-rsst.de>
|
||||
:forceinclude:
|
||||
:doctype: book
|
||||
//:numbered:
|
||||
include::kapitel-settings.adoc[]
|
||||
// Ein paar Einstellungen für PDF auf A4, in deutscher Sprache:
|
||||
include::PDF-settings-A4-de.adoc[]
|
||||
|
||||
|
||||
:kapitelIncluded:
|
||||
|
||||
include::GitAdministrationKurzdokumentation.adoc[leveloffset=+1]
|
||||
|
||||
include::GitOnline.adoc[leveloffset=+1]
|
||||
|
||||
include::GitLokal.adoc[leveloffset=+1]
|
||||
|
||||
include::GitKonsole.adoc[leveloffset=+1]
|
||||
|
||||
include::AnwendungsszenarienFBU.adoc[leveloffset=+1]
|
||||
|
||||
include::AnwendungsszenarienUnterricht.adoc[leveloffset=+1]
|
||||
|
||||
include::GitFortbildung.adoc[leveloffset=+1]
|
||||
|
||||
include::Glossar.adoc[leveloffset=+1]
|
||||
|
||||
|
||||
|
||||
200
GitAdministrationAnleitung.adoc
Normal file
|
|
@ -0,0 +1,200 @@
|
|||
= Anleitung zur Administration und Verwendung einer _gitcamp_ - Schulinstanz
|
||||
:author: Thomas Niesenhaus <thomas.niesenhaus@zsl-rska.de>
|
||||
include::kapitel-settings.adoc[]
|
||||
|
||||
== Wichtige Begriffe und Rollen
|
||||
Dieses Dokument soll als Schritt-für-Schritt-Anleitung zum Einrichten, Verwalten und Verwenden einer _gitcamp_-Instanz an Ihrer
|
||||
Schule dienen. Zum besseren Verständnis werden im Folgenden häufig verwendete Begriffe und Nutzerrollen
|
||||
spezifiziert.
|
||||
|
||||
|
||||
* **Repository ("Repo")**: Der Ort, an dem Sie Ihren Code/ Ihre Dateien für ein Projekt einschließlich ihres
|
||||
Revisionsverlaufs speichern.
|
||||
* **Organisation**: Gruppe von Nutzern mit Zugriff auf gemeinsame Repos -> Klasse oder Kurs
|
||||
* **Team**: Eine Organisation kann aus mehreren Teams mit unterschiedlichen Zugriffsrechten bestehen
|
||||
(normalerweise: "owners" und "students")
|
||||
* **Schulverwalter_in**: Zuständig für die Schulinstanz. Kann als einzige Person neue Nutzer (Lehrer_innen oder Schüler_innen)
|
||||
anlegen, löschen, Passwörter zurücksetzen etc.
|
||||
* **Lehrerinnen und Lehrer**: Können neue Organisationen (Klassen) mit Teams und Organisations-Repos anlegen.
|
||||
* **Schülerinnen und Schüler**: Können eigene Repos anlegen, aber keine Organisationen (Klassen)
|
||||
oder Teams
|
||||
|
||||
== Administration der _gitcamp_-Instanz
|
||||
|
||||
=== Nutzer_innen anlegen
|
||||
|
||||
Das Anlegen von Nutzerinnen und Nutzern geschieht grundsätzlich durch Hochladen von ASV-Daten im CSV - Format.
|
||||
Die folgende Beispieltabelle beschränkt sich auf jene Attribute, die auch tatsächlich vom System verarbeitet
|
||||
werden.
|
||||
|
||||
image::bilder/BilderAdministration/Admin1.png[]
|
||||
|
||||
==== Verarbeitung der Daten
|
||||
|
||||
Diese Tabelle würde nach dem Upload als CSV-Datei folgendermaßen verarbeitet werden:
|
||||
|
||||
- *Vor- und Nachname* wird importiert, aus _Vorname.Nachname_ wird der Username gebildet
|
||||
- Die *Emailadresse* wird entsprechend zugeordnet, falls vorhanden, ansonsten Vergabe einer Platzhalteradresse
|
||||
- *Klassen* - Zuordnung wird importiert, es werden automatisch entsprechende Klassen (Organisationen) mit Lehrern und Schülern
|
||||
gebildet
|
||||
- Die *Rolle* ("Lehrer" oder nicht belegt) entscheidet über die <<Organisationen und Teams, Berechtigungen>> eines Users.
|
||||
|
||||
Dies aus der CSV übernommenen Vor- und Nachnamen werden:
|
||||
|
||||
* transponiert
|
||||
* Umlaute werden entfernt
|
||||
* doppelte Vornamen werden entfernt. Z.B.: aus "Ben Marlon MüllerHofholz" wird
|
||||
"Ben.MuellerHofholz"
|
||||
* Der Benutzer jedes Nutzers Users wird nach folgendem Schema
|
||||
erzeugt: Vorname.Nachname
|
||||
* Bei identischen Vornamen, Nachnamen und/oder Geburtsnamen jedoch unterschiedlicher ID
|
||||
wird an den generierten Nutzernamen eine fortlaufende Nummer angehängt.
|
||||
|
||||
Beim Import von Nutzern aus der CSV-Datei werden diese bereits in die richtigen Klassen (Organisationen) eingepflegt.
|
||||
Nutzer, die sowohl in der CSV, als auch in der DB vorhanden sind, werden bei Bedarf neuen Klassen (Neues Schuljahr) oder
|
||||
zusätzlichen Organisationen (zB neue Lerngruppe) zugeordnet. Vorhandene Nutzer (DB + CSV) werden aus allen, nicht in der
|
||||
CSV zu diesem jeweiligen Nutzer hinterlegten Klassen gelöscht.
|
||||
|
||||
==== CSV - Upload
|
||||
|
||||
Klicken Sie auf den Button _Benutzerverwaltung_ (oben rechts). Sie gelangen zur Übersichtsseite der Schulverwalter-Funktionen.
|
||||
|
||||
image::bilder/BilderAdministration/Admin2.png[]
|
||||
|
||||
Über _Daten einlesen gelangen Sie nun zum Auswahldialog für den CSV - Upload:
|
||||
|
||||
image::bilder/BilderAdministration/Admin3.png[]
|
||||
|
||||
Wählen Sie nun Ihre CSV-Datei mit den zu erstellenden Nutzer_innen aus. Bei erfolgreicher Verarbeitung Ihrer Datei, erhalten
|
||||
Sie nach wenigen Sekunden eine Übersicht über alle importierten Schüler_innen und Lehrer_innen.
|
||||
|
||||
*Achtung: Die CSV Datei wird nur mit ";" als Trennzeichen erkannt und verarbeitet. Manche Tabellenkalkulationen speichern
|
||||
standardmäßig mit ",". Im Zweifelsfall entsprechende Einstellungen vornehmen bzw. die Datei im einfachen Texteditor öffnen
|
||||
und bearbeiten.*
|
||||
|
||||
=== Passwörter
|
||||
==== Initialpasswort
|
||||
Beim Import wird automatisch ein Initialpasswort generiert, welches bei der ersten Anmeldung
|
||||
geändert werden muss. Die Lehrkraft erhält per E-Mail eine Liste mit den Nutzerdaten der
|
||||
Klasse(n) in denen sie unterrichtet. Außerdem wird die Passwortliste unmittelbar nach dem Upload angezeigt. Es wird empfohlen,
|
||||
an dieser Stelle direkt einen Screenshot zu erstellen, da der Versand per Mail Stand 10/2024 nicht immer zuverlässig
|
||||
funktioniert hat.
|
||||
|
||||
==== Passwortreset
|
||||
Der Controller spielt je nach Lehrkraft die von ihr unterrichteten Klassen (Organisationen) in der
|
||||
GUI aus. Nach Auswahl der Klasse (Organisation) zeigt der Controller die Schülerinnen und
|
||||
Schüler der Klasse (Organisation) an. Nun kann die Lehrkraft in der jeweiligen Spalte der
|
||||
Schülerin oder des Schülers den Button „Passwort zurücksetzen“ anklicken. Anschließend wird
|
||||
der Lehrkraft ein temporäres Passwort angezeigt, welches bei der nächsten Anmeldung geändert
|
||||
werden muss.
|
||||
|
||||
=== Weitere Infos
|
||||
|
||||
Weitere technische Informationen z.B. zu Löschroutinen und User-Quotas gibt es hier:
|
||||
xref:GitAdministrationKurzdokumentation.adoc[Kurzdokumentation IBBW].
|
||||
|
||||
|
||||
|
||||
== Organisationen und Teams
|
||||
|
||||
Die _Organisation_ ist ein zentrales Element der _gitcamp_-Umgebung. Sie stellt eine Gruppe von Usern mit Zugriff
|
||||
zu gemeinsamen Repositories dar. Im Schulumfeld werden Organisationen verwendet um z.B. Klassen, Kurse und
|
||||
AG's abzubilden. Eine Organisation besteht aus mindestens einem _Team_. Das sind Untergruppen von Usern mit
|
||||
genau spezifizierten Zugriffs- und Erstellungsrechten innerhalb der Organisation. Nur Lehrer_innen dürfen Organisationen
|
||||
und Teams erstellen. Ob Schüler_innen Organisations-Repositories erstellen dürfen, lässt sich in den Team-Einstellungen
|
||||
spezifizieren. Standardmäßig ist dies nicht der Fall.
|
||||
|
||||
Im Folgenden zeigt Ihnen die fiktive Nutzerin "Lilo Wagner" (Rolle: Lehrerin) schrittweise das Erstellen und Verwalten
|
||||
einer Organisation. Bitte beachten Sie, dass eine Organisation für Ihre Klasse / Ihren Kurs u.U. schon automatisch durch
|
||||
den Schulverwalter im Zuge des CSV-Uploads erstellt wurde (siehe oben).
|
||||
|
||||
Wählen Sie über den "+"-Button oben rechts "Neue Organisation".
|
||||
|
||||
image::bilder/BilderAdministration/Orgas1.png[]
|
||||
|
||||
Wählen Sie einen geeigneten Namen für Ihre Organisation.
|
||||
|
||||
image::bilder/BilderAdministration/Orgas2.png[]
|
||||
|
||||
Die Sichtbarkeit Ihrer Organisation sollte in der Regel "begrenzt" (jeder eingeloggte User, also praktisch "schulweit")
|
||||
oder "privat" (nur für Orga-Mitglieder) sein. Nach der Erstellung sollte sich die Ansicht verändert haben. Wie links
|
||||
oben zu sehen, befinden wir uns nun in der Organisationsansicht. Über den kleinen Pfeil können Sie die Ansicht jederzeit
|
||||
zwischen allen Organisationen und Ihrer User-Ansicht wechseln.
|
||||
|
||||
image::bilder/BilderAdministration/Orgas3.png[]
|
||||
|
||||
Mit dem Button oben rechts gelangen Sie nun in die Detailansicht der Organisation:
|
||||
|
||||
image::bilder/BilderAdministration/Orgas4.png[]
|
||||
|
||||
Im folgenden Screenshot wurde der "Teams"-Tab ausgewählt. Erstellt man, eine Organisation, wird automatisch ein Team
|
||||
namens "Owners" erzeugt mit dem Erstellenden als einzigem Mitglied. Bei einer vom Schulverwalter per CSV_Upload automatisch
|
||||
erstellten Organisation gibt es im Normalfall außerdem bereits ein Team namens "Students" mit den entsprechend Schüler_innen.
|
||||
|
||||
image::bilder/BilderAdministration/Orgas5.png[]
|
||||
|
||||
Über den Button "Neues Team" kann man manuell ein weiteres Team erstellen. Dabei lassen sich umfangreiche Einstellungen bzgl.
|
||||
der Berechtigungen der Teammitglieder vornehmen. Diese sind gut beschrieben und sollten daher selbsterklärend sein. Ansonsten
|
||||
verweisen wir auf den entsprechenden Abschnitt der offiziellen Codeberg-Dokumentation: https://docs.codeberg.org/collaborating/create-organization/#teams .
|
||||
|
||||
Über _Ansehen_ -> _Einstellungen_ ändern Sie diese Berechtigungen für ein bereits bestehendes Team. Dort können Sie das
|
||||
betreffende Team bei Bedarf auch löschen.
|
||||
|
||||
Zum Abschluss fügen wir dem neu erstellten Team noch zwei Mitglieder hinzu. Auf der Organisationsseite gelangen wir beim neu
|
||||
erstellten Team "Schueler" über _ansehen_ auf folgender Seite:
|
||||
|
||||
image::bilder/BilderAdministration/Orgas6.png[]
|
||||
|
||||
Über das Textfeld werden nach Eingabe von mindestens zwei Zeichen entsprechende User vorgeschlagen, die man nun dem Team
|
||||
hinzufügen kann. Dabei findet man nur User, die unter _Einstellungen -> Profil_ die Benutzersichtbarkeit auf
|
||||
"öffentlich" geändert haben. Dazu klickt man zunächst auf den eigenen Avatar ganz oben rechts.
|
||||
|
||||
== Repositories
|
||||
|
||||
In den Repositories liegen Ihre Daten, also z.B. Ihr Quellcode oder Ihre Dokumentation. Dort geschieht auch die
|
||||
Versionsverwaltung für Ihr Projekt. Grundsätzlich gibt es zwei Arten von Repositories:
|
||||
|
||||
- Repos für persönliche Projekte
|
||||
- Repos für Organisations-Projekte
|
||||
|
||||
Ein persönliches Projekt wäre z.B. ein Tool, das eine Informatiklehrkraft entwickeln möchte oder ein Programmierprojekt eines
|
||||
Kursteilnehmenden. Organisationsrepos stellen beispielweise einer Klasse Programmier-Vorlagen samt Dokumentation zur Verfügung
|
||||
oder beinhalten gemeinsame Projektarbeiten von Teams aus Schüler_innen.
|
||||
|
||||
So erstellen Sie ein neues Repository:
|
||||
|
||||
image::bilder/BilderAdministration/Orgas7.png[]
|
||||
|
||||
Dabei öffnet sich diese Seite:
|
||||
|
||||
image::bilder/BilderAdministration/Orgas8.png[]
|
||||
|
||||
Es gibt noch weitere Einstellungen, die im Normalfall nicht geändert werden müssen. Falls doch, sei erneut auf die offizielle
|
||||
Dokumentation verwiesen: https://forgejo.org/docs/latest/user/first-repository/ . _Besitzer_ kann entweder der User selbst
|
||||
oder eine Organisation sein. So erstellt man entweder ein privates oder ein Organisationsrepo.
|
||||
|
||||
image::bilder/BilderAdministration/Orgas9.png[]
|
||||
|
||||
Die folgende Seite zeigt nun ein leeres Repository und enthält den Link auf das selbige zur weiterverwendung in
|
||||
der Konsole oder einem sonstigen git-fähigen Tool. Außerdem steht ein Anleitung zur Verfügung, mit der man entweder ein
|
||||
neues oder ein bestehendes lokales Repository verknüpfen kann.
|
||||
|
||||
Man kann auch im _gitcamp_ selbst neue Dateien erstellen und zu einem Repository hinzufügen. Auch wenn diese Funktion
|
||||
voraussichtlich eher selten zum Einsatz kommen wird, zeigen wir sie zum Abschluss kurz, um einen Blick auf die Versionshistorie
|
||||
einer Datei werfen zu können.
|
||||
|
||||
Wir klicken auf _Neue Datei_ und füllen dann folgendermaßen aus:
|
||||
|
||||
image::bilder/BilderAdministration/Orgas10.png[]
|
||||
|
||||
Bestätigen wir nun weiter unten mit _Änderungen committen_, haben wir die erste Datei unseres Repos erstellt. Klicken Sie
|
||||
nun auf das Stift-Symbol, um die Datei zu ändern und fügen sie einen weiteren Satz hinzu. Nach erneutem _Commit_ sollte
|
||||
das Ganze in etwa so aussehen:
|
||||
|
||||
image::bilder/BilderAdministration/Orgas11.png[]
|
||||
|
||||
Klickt man nun auf die zweite, geänderte Version (oben), erhält man detaillierte Informationen, über die Änderungen im
|
||||
Vergleich zur Vorversion:
|
||||
|
||||
image::bilder/BilderAdministration/Orgas12.png[]
|
||||
|
||||
8292
GitAdministrationAnleitung.pdf
Normal file
116
GitAdministrationKurzdokumentation.adoc
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
= Administration der Online-Umgebung
|
||||
:author: Thomas Niesenhaus <thomas.niesenhaus@zsl-rska.de>
|
||||
include::kapitel-settings.adoc[]
|
||||
|
||||
== Nutzerinnen und Nutzer zentral anlegen
|
||||
Beim Upload einer CSV werden diverse benutzerbezogene Kriterien vom Controller überprüft und bei
|
||||
Bedarf angepasst. Der CSV-Upload findet getrennt nach Lehrkräften sowie Schülerinnen und
|
||||
Schülern statt (in Umsetzung). Es muss beim Upload der Radiobutton gesetzt werden (Lehrkräfte oder
|
||||
Schülerinnen und Schüler). Dadurch wird Nutzerinnen und Nutzern auch die jeweilige Rolle
|
||||
zugewiesen.
|
||||
|
||||
=== CSV-Upload
|
||||
Zunächst findet ein Abgleich der hochgeladenen CSV-Datei statt. Dabei wird wie folgt verfahren:
|
||||
|
||||
* Benutzer in DB und CSV vorhanden, dann Aktualisierungen übernehmen
|
||||
* Benutzer in DB vorhanden, aber nicht in CSV, dann Benutzer/in deaktivieren
|
||||
* Benutzer in DB nicht vorhanden, aber in CSV, dann Nutzer/-in neu anlegen
|
||||
|
||||
=== Nutzer
|
||||
Folgende Daten werden aus der CSV-Datei importiert, verarbeitet, generiert und
|
||||
gespeichert:
|
||||
|
||||
* Vorname (importiert)
|
||||
* Nachname (importiert)
|
||||
* Primärschlüssel (importiert)
|
||||
* Klassenzuordnung (importiert)
|
||||
* E-Mail Adresse (importiert, falls vorhanden, ansonsten Vergabe einer Platzhalter E-Mail
|
||||
Adresse)
|
||||
* Initialpasswort (generiert)
|
||||
* Rolle (ergibt sich aus dem Upload)
|
||||
|
||||
==== Nutzer anlegen
|
||||
Dies aus der CSV übernommenen Vor- und Nachnamen werden:
|
||||
|
||||
* transponiert
|
||||
* Umlaute werden entfernt
|
||||
* doppelte Vornamen werden entfernt. Z.B.: aus "Ben Marlon MüllerHofholz" wird
|
||||
"Ben.MuellerHofholz"
|
||||
* Der Benutzer jedes Nutzers Users wird nach folgendem Schema
|
||||
erzeugt: Vorname.Nachname
|
||||
* Bei identischen Vornamen, Nachnamen und/oder Geburtsnamen jedoch unterschiedlicher ID
|
||||
wird an den generierten Nutzernamen eine fortlaufende Nummer angehängt.
|
||||
|
||||
==== Nutzerzuordnung
|
||||
Beim Import von Nutzern aus der CSV-Datei werden diese bereits in die richtigen Klassen
|
||||
(Organisationen) eingepflegt. Nutzer, die sowohl in der CSV, als auch in der DB vorhanden sind,
|
||||
werden bei Bedarf neuen Klassen (Neues Schuljahr) oder zusätzlichen Organisationen (zB neue
|
||||
Lerngruppe) zugeordnet. Vorhandene Nutzer (DB + CSV) werden aus allen, nicht in der CSV zu
|
||||
diesem jeweiligen Nutzer hinterlegten Klassen gelöscht.
|
||||
|
||||
== Passwörter
|
||||
=== Initialpasswort
|
||||
Beim Import wird automatisch ein Initialpasswort generiert, welches bei der ersten Anmeldung
|
||||
geändert werden muss. Die Lehrkraft erhält per E-Mail eine Liste mit den Nutzerdaten der
|
||||
Klasse(n) in denen sie unterrichtet.
|
||||
|
||||
=== Passwortreset
|
||||
Der Controller spielt je nach Lehrkraft die von ihr unterrichteten Klassen (Organisationen) in der
|
||||
GUI aus. Nach Auswahl der Klasse (Organisation) zeigt der Controller die Schülerinnen und
|
||||
Schüler der Klasse (Organisation) an. Nun kann die Lehrkraft in der jeweiligen Spalte der
|
||||
Schülerin oder des Schülers den Button „Passwort zurücksetzen“ anklicken. Anschließend wird
|
||||
der Lehrkraft ein temporäres Passwort angezeigt, welches bei der nächsten Anmeldung geändert
|
||||
werden muss.
|
||||
|
||||
== Klassen
|
||||
Klassen (Organisationen) werden nach folgendem Schema erstellt:
|
||||
|
||||
* Klassen (Organisationen) die beim CSV-Import erzeugt werden, erhalten automatisch ein
|
||||
Suffix mit dem Erstellungsjahr. Muster: 10b-2023
|
||||
* Jede automatisch angelegte Klasse wird in einer Organisation abgebildet und die
|
||||
entsprechenden Nutzer werden dieser Organisation zugeordnet.
|
||||
* Eine Organisation "Lehrkräfte" wird einmalig erstellt. Die importierten Lehrkräften werden
|
||||
der Organisation automatisch zugeordnet.
|
||||
|
||||
Schülerinnen und Schüler können keine Klassen anlegen.
|
||||
|
||||
== Repository
|
||||
Jede Organisation (Klasse) erhält automatisch ein Repository. Der Besitzer des Repository ist die
|
||||
unterrichtende Lehrkraft. Repositories werden nach folgendem Schema erzeugt:
|
||||
|
||||
* Der Zeitpunkt der Repoanlage wird automatisch im Repotitel als Suffix angehängt, sofern die
|
||||
Anlage durch einen Schüler erfolgt. Z.B. Robotik-2023
|
||||
* Repos die in Organisationen liegen können ausschließlich von Lehrkräften erzeugt werden.
|
||||
* Maximal 50 Repos je Nutzer.
|
||||
|
||||
== Löschroutine
|
||||
Die automatische Löschung von Klassen (Organisationen), Repos und Nutzern wird von einer Routine
|
||||
übernommen. Dabei wird nach folgendem Schema vorgegangen:
|
||||
|
||||
* *Organisationen*:
|
||||
** Organisationen mit - im Namen oder automatisch über CSV erzeugte Organisationen
|
||||
werden automatisch am 30. September des nachfolgenden Jahres archiviert.
|
||||
** Wenn eine langfristige Organisation benötigt wird (z. B. "Informatik-AG"), muss diese
|
||||
beim Schul-Verwalter beantragt werden.
|
||||
** Nach 365 Tagen erfolgt die automatische Löschung von archivierten Inhalten, dies
|
||||
kann nur durch den Schul-Verwalter verhindert werden.
|
||||
** Die Organisation "Lehrer" beinhaltet keine automatische Archivierung von Repos.
|
||||
* *Nutzer*:
|
||||
** 365 Tage nach Deaktivierung erfolgt die automatische Löschung von deaktivierten
|
||||
Benutzern und deren Inhalten, dies kann nur durch den Schul-Verwalter verhindert
|
||||
werden
|
||||
* *Repos*:
|
||||
** Repos, die In Organisationen liegen, werden 1 Jahr nach der Anlage automatisch
|
||||
archiviert, wenn sie ein - im Namen tragen.
|
||||
** 365 Tage nach Archivierung erfolgt die automatische Löschung von archivierten
|
||||
Inhalten, dies kann nur durch den Schul-Verwalter verhindert werden.
|
||||
Logs
|
||||
** Zugriffs-Logs der Schulinstanz werden automatisch nach 21-90 Tagen gelöscht
|
||||
|
||||
== Quota
|
||||
|
||||
Die Löschroutine trägt einen wesentlichen Teil dazu bei, dass keine unnötigen Daten dauerhaft
|
||||
gespeichert werden. Zusätzlich wird GitCamp eine Quota beinhalten (Aktuell noch in der Testphase).
|
||||
Die Quota kann über eine Weboberfläche innerhalb GitCamps geändert werden. Für jede Instanz ist
|
||||
die Quota bei der Einrichtung identisch. Sollte die Quota von einem Nutzer überschritten werden, so
|
||||
werden der Schul-Admin und der Nutzer per E-Mail benachrichtigt.
|
||||
3662
GitAdministrationKurzdokumentation.pdf
Normal file
252
GitFortbildung.adoc
Normal file
|
|
@ -0,0 +1,252 @@
|
|||
= Übungen für die Fortbildung
|
||||
:author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
include::kapitel-settings.adoc[]
|
||||
|
||||
Für die Fortbildung sind Übungen mit GIT vorgesehen, die den Anwendungsszenarien für den Unterricht entsprechen. Dabei schlüpfen die Teilnehmenden sowohl in die Rolle der Lehrer als auch in die Rolle der Schüler. Die Fortbildenden sollten daher genau darauf achten, die jeweilige Rolle deutlich herauszuarbeiten.
|
||||
|
||||
****
|
||||
*Fortbildner:* Das Arbeiten mit GIT ist sehr anspruchsvoll und für GIT-Anfänger oftmals sehr verwirrend. Beschränken Sie sich daher in der ersten Fortbildung auf die Übungen mit einem lokalen Repository (Kapitel <<_lokal_versionieren>>), das Anlegen eines Online-Repositorys und des Sicherns des lokalen Repos auf dem Online-Speicher (Kapitel <<_vorlage_übernehmen_und_lokal_versionieren>>), damit an verschiedenen Rechnern gearbeitet werden kann. Alle anderen Übungen sind optional und können ggf. in einer Anschlussveranstaltung durchgeführt werden.
|
||||
****
|
||||
|
||||
== Lokal Versionieren
|
||||
|
||||
****
|
||||
*Fortbildner:* Das lokale Versionieren wird in den folgenden Übungen noch intensiver geübt. Daher geht es hier nur darum eine erste Erfahrung zu sammeln und zu erkennen, wie eine Versionsverwaltung arbeitet.
|
||||
|
||||
Entscheiden Sie, ob der Arbeit mit einer GUI eine kurze Arbeitsphase mit der GIT-Konsole vorangestellt werden sollte.
|
||||
****
|
||||
|
||||
*Aufgaben:*
|
||||
|
||||
. Legen Sie mit Smartgit ein neues Repository an (Menü Repository->Add or create). Wählen Sie dort einen Ordner aus. Da er noch kein Repository enthält, müssen Sie das Repository zunächst initialisieren.
|
||||
|
||||
. Erstellen Sie in diesem Ordner eine Text-Datei und schreiben Sie "Version 1" als Text hinein.
|
||||
. Sie sehen in Smartgit, dass eine Datei hinzugekommen ist. Erstellen Sie eine "Commit"-Nachricht, fügen die Datei dem Stage-Bereich hinzu und commiten diesen Zustand.
|
||||
. Verändern Sie die Textdatei (z. B. "Version 2" hineinschreiben) und legen Sie eine weitere Datei an. Commiten Sie diese Veränderungen auch.
|
||||
. Sie können nun zwischen den beiden Version hin- und herwechseln und sehen in Smartgit, welche Veränderungen gemacht wurden. Es biete sich an, die Schülerinnen und Schüler (mindestens) jeweils am Ende der Unterrichtsstunde einen Commit machen zu lassen, dann ist der jeweilige Arbeitsstand des Tages gesichert.
|
||||
|
||||
== Mit Vorlagen in einem Online-Repository arbeiten
|
||||
|
||||
image::bilder/fortbildungsverlauf2.svg[]
|
||||
|
||||
Ziel der zweiten Übung ist es, selbst ein Repository durch Clonen eines online bereitgestellten Repositorys anlegen zu können, mit diesem zu arbeiten und die Arbeitsschritte lokal zu versionieren.
|
||||
|
||||
In der Schule wird in der Regel, das vom Lehrer bereitgestellte Repository von den Schülern geclont. Sie befinden sich also im Moment in der Rolle der Schüler.
|
||||
|
||||
****
|
||||
*Vorbereitung Fortbildner:* Erstellen Sie ein neues Repository und kopieren Sie die Version 1 des Matter-Projekts dort hinein. Stellen Sie das Repository online bereit und teilen Sie den Teilnehmern den Link zum Repo mit.
|
||||
****
|
||||
|
||||
=== Vorlage übernehmen und lokal versionieren
|
||||
|
||||
*Aufgaben:*
|
||||
|
||||
. Erzeugen Sie ein neues lokales Repository durch Clonen des vom Fortbildner angegebenen Online-Repository.
|
||||
. Öffnen Sie die Datei Test.html mit einem Browser.
|
||||
. Öffnen Sie die Datei Test.html mit einem beliebigen Texteditor (z. B. notepad++). Fügen Sie Ihren Namen bei "Autor" hinzu. Speichern Sie die Datei, überzeugen Sie sich, dass die Änderungen im Browser zu sehen sind.
|
||||
. Sie sehen auch in Smartgit, dass die Datei verändert wurde und bekommen die Änderungen im Detail angezeigt. Tragen Sie eine Commit-Nachricht ein, stagen Sie die Datei und commiten Sie die Änderungen.
|
||||
. Fügen Sie einen Kreis (Bodies.circle verlangt die X- und die Y-Koordinate des Mittelpunkts und den Radius als Parameter) in der Welt hinzu.
|
||||
+
|
||||
----
|
||||
var circle = Bodies.circle(440, 150, 40);
|
||||
----
|
||||
+
|
||||
Beachten Sie, dass er auch beim Composite.add Befehl ergänzt werden muss.
|
||||
Stage/Commiten Sie die Änderungen.
|
||||
. Fügen Sie ein Fünfeck (Bodies.polygon verlangt die X- und die Y-Koordinate des Mittelpunkts, die Anzahl der Ecken und den Radius als Parameter).
|
||||
+
|
||||
----
|
||||
var fuenfeck = Bodies.polygon(380, 250, 5, 30);
|
||||
----
|
||||
+
|
||||
Stage/Commiten Sie die Änderungen.
|
||||
. Verdrehen Sie die Würfel um einen beliebigen Winkel:
|
||||
+
|
||||
----
|
||||
var boxA = Bodies.rectangle(400, 200, 80, 80, {angle: 0.5} );
|
||||
----
|
||||
+
|
||||
Stage/Commiten Sie die Änderungen.
|
||||
. Wechseln Sie in Smartgit zu den verschiedenen Entwicklungsstufen (checkout). Es reicht, wenn Sie ohne lokalen Branch (read only) arbeiten. Kontrollieren Sie im Browser, dass sich die Datei Test.html im jeweiligen Entwicklungszustand befindet.
|
||||
|
||||
=== Änderungen an der Vorlage (Rebase)
|
||||
Es kommt immer wieder vor, dass ein Fehler in den bereitgestellten Dateien erst im Verlauf des Unterrichts bemerkt wird. Nun wäre es gut, die Originaldateien ändern zu können und trotzdem alle von den Schülern gemachten Änderungen beibehalten zu können.
|
||||
|
||||
****
|
||||
*Vorbereitung Fortbildner:* Kopieren Sie Version 2 der Matter-Projekt-Vorlage in ihr Repo und pushen Sie die neue Version.
|
||||
****
|
||||
|
||||
[start=9]
|
||||
. Sollte noch kein Remote-Verzeichnis in Smartgit existieren, legen Sie in Smartgit ein neues für das Online-Repo des Fortbildners an, das Sie vorhin geclont haben. Rufen Sie mit Fetch die Information über dieses Repo ab.
|
||||
. Führen Sie ein Rebase durch. Wählen Sie ihren lokalen Branch aus und rufen Sie das Kontextmenü auf. Achten Sie darauf, dass ihr lokaler Branch fett markiert ist. Wählen Sie dann "Rebase" aus und führen Sie das Rebase automatisch durch ("Rebase HEAD to"). +
|
||||
Kontrollieren Sie im Browser, dass die Objekte nur gefüllt sind. Untersuchen Sie, an welcher Stelle der Versionshistorie die Umstellung auf "wireframes: false" stattgefunden hat.
|
||||
|
||||
=== Musterlösung bereitstellen
|
||||
|
||||
Gerne möchte man als Lehrender am Ende oder als Zwischenstand eine Musterlösung bereitstellen. Die Schülerinnen und Schüler sollen ihre Lösungen mit der Musterlösung vergleichen und nur dort, wo sie nicht fertig wurden oder Fehler erkannt wurden, die Musterlösung übernehmen.
|
||||
|
||||
****
|
||||
*Vorbereitung Fortbildner:* Kopieren Sie Version "Würfel verdreht" der Matter-Projekt-Vorlage in ihr Repo und pushen Sie dieses.
|
||||
****
|
||||
|
||||
[start=11]
|
||||
. Führen Sie erneut einen Fetch für das Online-Repo des Fortbildners durch.
|
||||
. Führen Sie nun über das Kontextmenü des lokalen Branches ein Merge durch. Wählen Sie dazu "Merge to Working Tree". Dies hat den Vorteil, dass die aktuellen Änderungen jederzeit verworfen werden können, wenn der Merge Probleme bereitet. +
|
||||
Vergleichen Sie dabei die Musterlösung der Fortbildungsmaterialien mit ihrer Lösung. Sie sehen, dass die Datei Test.html sowohl von Ihnen wie auch von der Musterlösung verändert wurde (The file is in Conflicted (both modified) state). Rufen Sie den Conflict Solver auf. Links sehen Sie ihre Lösung (ours), rechts die heruntergeladene Musterlösung (theirs). Sie können nun über die ">>" bzw. "<<" Buttons entscheiden, welche Variante sie übernehmen wollen. Übernehmen Sie nur dann die Musterlösung, wenn ihre Lösung Fehler enthält oder unvollständig ist. Speichern Sie die aktualisierte Version, schließen Sie den Conflict Solver und markieren sie den Konflikt als gelöst. +
|
||||
Zum Abschluss müssen Sie noch einen Commit durchführen, um den Merge-Prozess abzuschließen.
|
||||
|
||||
|
||||
== Eigenes Repository online ablegen
|
||||
|
||||
Ein lokales Image ermöglicht die Versionsverwaltung auf einem Rechner. Sowohl Schüler als auch Lehrkräfte arbeiten aber sowohl in der Schule als auch zu Hause. Daher ist ein Datenaustausch zwischen verschiedenen Rechnern notwendig. Dieser erfolgt über die Speicherung auf einem GIT-Server. Das Land Baden-Württemberg stellt dafür den GIT-Camp Server zur Verfügung. In dieser Übung lernen Sie den Datenaustausch mit dem GIT-Camp Server kennen.
|
||||
|
||||
image::bilder/fortbildungsverlauf3.svg[]
|
||||
|
||||
=== Anlegen eines Repositories auf dem GIT-Camp Server
|
||||
|
||||
|
||||
. Loggen Sie sich mit Ihren GIT-Camp Login-Daten auf dem Server ein.
|
||||
. Legen Sie dort ein neues Repository an:
|
||||
- Wählen Sie einen Namen.
|
||||
- Stellen Sie die Sichtbarkeit auf "privat".
|
||||
- Geben Sie eine kurze Beschreibung ein : z. B. "Matter-Projekt der GIT-Fortbildung".
|
||||
- Die restlichen Felder können Sie leer lassen. Der Haken bei "Repository initialisieren" darf *nicht* gesetzt sein.
|
||||
. Kopieren Sie die URL des Repositorys und legen Sie in Smartgit in Ihrem Repository ein neues Remote-Verzeichnis (=Online-Repository) an (Menü Remote->Add). Fügen Sie die kopiere URL ein und wählen als Namen "GIT-Camp".
|
||||
. Führen sie zunächst ein Fetch auf diesem Remote-Verzeichnis durch, damit Smartgit die Informationen über das Repositiory abfragt. Führen Sie danach ein "Push to..." mit ihrem lokalen Repository durch und wählen das Remote-Verzeichnis als Ziel. Prüfen Sie auf "Git-Camp", dass die Dateien übertragen wurden.
|
||||
. Damit ihr lokales und das Remote-Verzeichnis verknüpft sind, können Sie außerdem "Set tracked branch" auf ihr Remote-Verzeichnis setzen. Sie müssen dann in Zukunft nicht immer angeben, mit welchem Remote-Verzeichnis ein pull oder ein push durchgeführt werden soll. Dazu muss allerdings vorher einmal ein Push auf dieses Remote-Verzeichnis durchgeführt werden.
|
||||
|
||||
Sie führen nun noch eine weitere Änderungen an den Dateien durch und legen diese auf dem Server ab.
|
||||
|
||||
[start=6]
|
||||
. Teilen Sie die Datei Test.html in drei Teile auf:
|
||||
- Schneiden Sie aus dem JavaScript-Teil alles aus, was mit den Objekten in der Welt zu tun hat (Erstellen der Objekte und Einfügen in die Welt) aus und fügen Sie es in eine neue Datei "objekte.js" ein. Ein umgebender <script>-Tag ist nicht notwendig.
|
||||
- Schneiden Sie aus dem JavaScript-Teil alles aus, was mit der Welt zu hat (also den gesamten Rest des Scripts) und fügen Sie es in eine neue Datei "welt.js" ein.
|
||||
- Ändern Sie "Test.html" so ab, dass die beiden Scripte geladen werden:
|
||||
+
|
||||
----
|
||||
<script src="welt.js"></script>
|
||||
<script src="objekte.js"></script>
|
||||
----
|
||||
+
|
||||
Der umgebende Rest an HTML-Code bleibt erhalten.
|
||||
|
||||
. Stage/Commiten Sie die Änderungen lokal. Pushen Sie die Änderungen auf den Git-Camp-Server.
|
||||
. Wählen Sie die Farben der Objekte selbst aus, z. B.:
|
||||
+
|
||||
----
|
||||
boxA.render.fillStyle = "#FF66AC"; // z.B. für Pink
|
||||
----
|
||||
+
|
||||
Stage/Commiten Sie die Änderungen lokal. Pushen Sie die Änderungen auf den Git-Camp-Server.
|
||||
|
||||
. Überzeugen Sie sich, dass die verschiedenen Versionen nun auf dem Git-Camp-Server verfügbar sind und die gesamte Änderungshistorie nachvollziehbar ist (auch die Änderungen, die erfolgt sind, bevor das Repository auf den Git-Camp-Server hochgeladen wurde).
|
||||
|
||||
=== Arbeiten an verschiedenen Orten
|
||||
|
||||
In dieser Übung sollen Sie lernen, wie Sie an verschiedenen Orten mit ihrer jeweils aktuellen Version arbeiten können. Wechseln Sie daher mit ihrem Nachbarn den Rechner.
|
||||
|
||||
. Clonen Sie ihr eigenes Repository auf dem Rechner des Nachbarn. Wählen Sie dazu in Smartgit Menü Repository->Clone und geben die URL ihres Repositories auf dem Git-Camp-Server an. Wählen Sie als lokales Verzeichnis ein neues, leeres Verzeichnis.
|
||||
. Überzeugen Sie sich, dass ihre aktuelle Version nun lokal auf dem neuen Rechner verfügbar ist. Untersuchen Sie, ob auch alle vorherigen Versionen vorhanden sind.
|
||||
. Die Objekte soll nun wie ein Gummiball herumspringen. Dazu muss der Boden gummiartig werden:
|
||||
+
|
||||
----
|
||||
ground.restitution = 1.3;
|
||||
----
|
||||
+
|
||||
Stagen/Commiten Sie die Änderung lokal und pushen Sie die Änderung auf den Git-Camp-Server. Überzeugen Sie sich davon, dass die Änderungen auf dem Git-Server übernommen wurden.
|
||||
. Wechseln Sie zu ihrem eigenen Rechner zurück und pullen Sie aktuelle Version vom Git-Camp-Server. Überzeugen Sie sich, dass die Objekte jetzt auch auf diesem Rechner herumspringen.
|
||||
|
||||
== Zusammenarbeit Lehrer-Schüler
|
||||
In dieser Übung wird die Situation simuliert, dass die Schüler mit einem online-Repository arbeiten, das auf einer Vorlage des Lehrers beruht, und der Lehrer den aktuellen Arbeitsstand der Schüler sichtet und Fehler behebt oder zumindest kommentiert.
|
||||
|
||||
image::bilder/fortbildungsverlauf4.svg[]
|
||||
|
||||
Dazu ist es notwendig, dass der Schüler lesenden Zugriff auf das Repository des Lehrers und der Lehrer lesenden und schreibenden Zugriff auf das Repository des Schülers besitzt. Nur so kann er die Korrekturen an den Schüler zurückgeben.
|
||||
|
||||
In dieser Übung agieren Sie sowohl als Lehrer als auch als Schüler: Als Lehrer stellen Sie ein Repository bereit und gewähren den Schülern lesenden Zugriff. "Schüler" ist in diesem Fall Ihr linker Nachbar. Dieser legt einen Forkfootnote:[Diese Anwendungsszenario lässt sich auch mit einem Clone umsetzen. Allerdings ist ein Clone normalerweise dafür vorgesehen, wenn man zusammen an einem einzigen Projekt arbeiten möchte. Jeder Schüler/jede Schülerin arbeitet aber an einem eigenen Projekt. Daher sollte hier ein Fork gewählt werden.] ihres Repositorys an und baut einen Fehler in das Programm ein. Sie übernehmen diesen Part für Ihren rechten Nachbarn. Danach holen Sie sich das Repositorys des "Schülers" (ihres linken Nachbarn) und suchen dessen Fehler. Die korrigierte und kommentierte Version geben Sie an den "Schüler" zurück.
|
||||
|
||||
. Lehrerrolle: Räumen Sie ihrem linken Nachbarn (dem "Schüler") im Git-Camp Leserechte auf Ihr Online-Repository ein. Gehen Sie dazu in der Onlineumgebung von Git-Camp beim Repo auf Einstellungen->Mitarbeiter und fügen den Namen ihres linken Nachbarn hinzu. Gewähren Sie nur Leserechte! In der Schule müssten Sie das für die ganze Klasse machen. (TODO: Geht das auch für Gruppen?)
|
||||
|
||||
. Schülerrolle: Da Ihr "Lehrer" (rechter Nachbar) sein Repository für Sie freigegeben hat, sehen Sie es in Git-Camp in der Liste der verfügbaren Repositories. Wählen Sie es aus und legen Sie einen Fork an. Benennen Sie den Fork so, dass Sie Ihren Namen an den Repository-Namen anhängen.
|
||||
|
||||
. Schülerrolle: Räumen Sie Ihrem "Lehrer" (rechter Nachbar) Lese- und Schreibrechte auf Ihren Fork ein. Im Schulumfeld ist dieser Schritt nicht notwendig, da Sie als Besitzer einer Gruppe in der Organisation automatisch Lese- und Schreibrechte auf die Repos der Gruppenmitglieder besitzen.
|
||||
|
||||
. Schülerrolle: Legen Sie eine lokale Kopie Ihres Forks an, indem Sie das Repository mit SmartGit clonen.
|
||||
|
||||
. Schülerrolle: Bauen Sie an beliebiger Stelle einen Fehler ein. Stage/commiten Sie die geänderte Version und verwenden Sie als Commit-Message "Ich weiß nicht weiter... Es geht nichts mehr." (Sie dürfen das "nichts" auch näher beschreiben, dass sollte man von Schülern verlangen).
|
||||
|
||||
. Lehrerrolle: Legen Sie (für jeden Schüler) im Smartgit ein neues Remote-Verzeichnis an (Menü Remote -> Add). Geben Sie dort die URL des Forks Ihres "Schülers" (rechter Nachbar) an. Sie können in Git-Camp alle Forks ihrer Schüler anzeigen lassen, wenn Sie auf die Zahl neben "Fork" klicken. Wählen Sie einen Fork aus, sehen Sie die URL des Forks im Browser. +
|
||||
Als Name des Remote-Verzeichnis wählen Sie nicht "origin", sondern den Namen Ihres Schülers.
|
||||
|
||||
. Lehrerrolle: Holen Sie sich die Informationen über das neue Remote-Verzeichnis, indem Sie ein "Fetch" auf dem Remote-Verzeichnis ausführen (Rechtsklick). Sie sollten dann die Branches sehen, die das Projekt enthält (in der Regel nur einen master-Branch). Wählen Sie diesen aus, indem Sie ein "Check out" durchführen. Sie bestätigen dann die Frage, ob ein lokaler Branch angelegt werden soll. Auf diese Weise bekommen Sie für jeden Schüler einen Branch, der dem Namen des Schülers entspricht. Sie können dann sehr schnell zwischen den verschiedenen Schülerversionen hin- und herwechseln.
|
||||
|
||||
. Lehrerrolle: Suchen (und korrigieren) Sie den Fehler, den Ihr Schüler eingebaut hat. Schreiben Sie eine Rückmeldung / Erklärung in die Commit-Message, welche Arbeiten der Schüler noch selbst durchführen muss, um seinen Fehler zu beheben. Stage/Commiten Sie die Änderungen lokal und pushen Sie die Änderung Sie Änderungen in den Fork des Schülers. Normalerweise müssen Sie dazu einfach "Push" wählen, da bei dieser Variante der Branch so angelegt wurde, dass der "Tracking branch" automatisch das Remote-Verzeichnis des entsprechenden Schülers ist. Ansonsten müssen Sie den Tracking branch setzen oder "Push to" benutzen.
|
||||
|
||||
. Schülerrolle: Schauen Sie auf Git-Camp nach, ob Ihr "Lehrer" (rechter Nachbar) ihren Fehler gefunden hat und Ihnen Tipps gegeben hat, wie Sie ihn korrigieren können. Pullen Sie die Änderungen des "Lehrers", so dass ihr lokales Repository wieder auf dem aktuellen Stand ist. Beheben Sie mit den Tipps des Lehrers ggf. noch vorhandene Fehler. +
|
||||
*Achtung:* Es ist essentiell, dass die SuS zunächst den Pull durchführen und den Fehler sich nicht nur online anschauen. Wird kein Pull durchgeführt und der Fehler lokal behoben, entsteht beim nächsten Push ein Konflikt, da eine neuere Version auf dem Server vorhanden ist. Diese muss erst gepullt und mit der lokalen Version gemerged werden.
|
||||
|
||||
== Kooperatives Arbeiten
|
||||
Die komplexeste Form der Nutzung von GIT ist das kooperative Arbeiten an einem Projekt. Dafür ist GIT konzipiert worden. Hier arbeiten mehrere Personen gleichzeitig an einem Projekt. Eine genaue Absprache, wer welche Teile des Projektes bearbeitet, ist unerlässlich. Trotzdem lässt es sich nicht vermeiden, dass einige Dateien von mehreren Personen bearbeitet werden. Es werden also beim Zusammenführen unweigerlich Konflikte auftreten.
|
||||
|
||||
Um das Chaos in einem überschaubaren Rahmen zu halten, sollten nicht alle Gruppenmitglieder volle Schreibrechte auf das Repository haben. Es ist einfacher, wenn zunächst jeder im eigenen Fork arbeitet und ein Gruppenmanager die Ergebnisse kontrolliert zusammenführt.
|
||||
|
||||
image::bilder/fortbildungsverlauf5.svg[]
|
||||
|
||||
. Finden Sie sich in Gruppen von 3-4 Personen zusammen. Jeder von Ihnen ist im schulischen Kontext ein Schüler oder eine Schülerin. Bestimmen Sie einen Gruppen-Manager. Dieser ist verantwortlich dafür, die Arbeiten der einzelnen Gruppenmitglieder zusammenzuführen und online zu stellen.
|
||||
|
||||
. Gruppenmanager: Als Gruppenmanager räumen Sie den Gruppenmitgliedern lesenden Zugriff auf ihr Repository ein.
|
||||
|
||||
. Gruppenmitglieder: Forken Sie das bereitgestellte Repository und räumen Sie ihrem Gruppenmanager lesenden Zugriff auf ihren Fork ein.
|
||||
|
||||
. Gruppenmitglieder (+ Manager): Bearbeiten Sie arbeitsteilig eine der folgenden Aufgaben. Sie sind aufsteigend nach Schwierigkeitsgrad geordnet. Nutzen Sie das Internet oder eine KI, um den Code zu erstellen. +
|
||||
*Tipp:* Drücken Sie in Chrome Strg+Shift+I um die Entwickler-Tools angezeigt zu bekommen. Nur dort stehen Fehlermeldungen der Webseite, wenn Programmierfehler auftreten:
|
||||
|
||||
- Lassen Sie die Geschwindigkeiten (velocity) der Objekte in der Welt durch kleine Pfeile anzeigen. Dies ist eine Funktionalität, die im Renderer aktiviert werden kann.
|
||||
|
||||
- Fügen Sie rechts und links Wände hinzu, die sich natürlich nicht bewegen. Die Wände müssen nicht bis ganz oben gehen, so dass die Objekte ab einen gewissen Füllgrad über die Wände hinausfallen.
|
||||
|
||||
- Bauen Sie Balken in der Welt ein, die sich nicht bewegen und auf denen die Objekte herunterrutschen. Die Reibung sollte also nicht zu groß sein.
|
||||
|
||||
- Fügen Sie 1000 kleine Würfelchen in die Welt ein. Diese sollen an zufälligen Positionen in der oberen Hälfte des Bildschirm erzeugt werden. Schöner sieht es aus, wenn auch die Verdrehung zufällig ist. +
|
||||
Wenn man die Reibung (friction) der Würfel verringert, dann rutschen sie allmählich auseinandern.
|
||||
|
||||
- Fügen Sie der Webseite Schieberegler hinzu, die die Schwerkraft der Simulation in X- und in Y-Richtung verändern. Ordentlich beschriftet sollen sie natürlich auch sein.
|
||||
|
||||
- Fügen Sie der HTML-Seite einen "Wasserhahn"-Button hinzu, der fortlaufend kleine blaue Kreise (Wassertropfen) in der Welt erzeugt, solange die Maus auf dem Button gedrückt gehalten wird.
|
||||
|
||||
- Fügen Sie der HTML-Seite einen "Kanone"-Button hinzu, der größere Kreise von einer bestimmten Position aus verschießt. Die Kreise sollten zunächst schräg nach oben fliegen. Gegebenenfalls können Sie die Stärke des Schußes zufällig wählen oder irgendwie steuren. Wenn das Gewicht der Kreise groß ist, können sie andere Objekte wegschießen.
|
||||
|
||||
. Gruppenmitglieder: Nachdem Sie eine Aufgabe erfüllt haben, stagen/commiten Sie die Änderungen. Pushen Sie die Änderungen auch in ihr Online-Repository. Gehen Sie dann zur Online-Umgebung von Git-Camp wählen Ihr Repository aus. Wählen Sie dann den Reiter "Pull-Request" und erzeugen Sie einen neuen Pull-Request. Das Ziel des Requests muss das Repository des Gruppenmanagers sein. Von Ihrem eigenen Repository soll gepullt werden. Sie sehen, welche Änderungen im Vergleich zum Manager Sie vorgenommen haben. +
|
||||
Der Manager erhält dadurch eine Nachricht (ggf. sogar eine E-Mail), dass Sie die Einarbeitungen der Änderungen wünschen. Sie sollten daher dem Pull-Request einen sinnvollen Titel und eine Beschreibung Ihrer Arbeit hinzufügen. Andernfalls wird der Manager den Request vermutlich gar nicht erst in Betracht ziehen.
|
||||
|
||||
. Gruppenmanager: Sie sehen in Git-Camp, dass ein Pull-Request eingetroffen ist.
|
||||
|
||||
- Variante A: Sie können dem Pull-Request direkt online stattgeben und die Repos zusammenführen. Dies ist für sehr einfache Änderungen (z. B. Tippfehler) sinnvoll. Holen Sie sich im Anschluß mit Pull die neue Version in ihr lokales Repo.
|
||||
- Variante B: Größere Änderungen sollten vorher begutachtet werden.
|
||||
Dann sollten Sie zunächst das Repo des Gruppenmitgliedes herunterladen und lokal zusammenführen. +
|
||||
Fügen Sie wie in der Übung "Zusammenarbeit Schüler-Lerher" ein neues Remote-Verzeichnis für das Repo des Gruppenmitgliedes hinzu. Führen Sie einen Fetch durch und checken Sie dann den master-Branch des neues Remote-Verzeichnisses out. Stimmen Sie dem Anlegen eines lokalen Branches zu. Wählen Sie diesen lokalen Branch aus (check out) und testen Sie die Neuerungen. +
|
||||
Wenn Sie mit diesen Neuerungen einverstanden sind, dann wählen Sie ihren eigenen lokalen Master-Branch aus (check out). Dieser muss unbedingt fett geschrieben und mit einem Pfeil markiert sein! Wählen Sie dann im Kontext-Menü des Branches mit den Neuerungen den Menüpunkt "Merge" (Merge to Working Tree) aus. Dort müssen Sie nun gegebenenfalls Konflikte mit dem Conflict Solver lösen. +
|
||||
Schließen Sie den Merge-Prozess ab, indem Sie eine sinnvolle Commit-Message schreiben und die Änderungen sichern. Pushen Sie die Änderungen in Ihr Online-Repo.
|
||||
|
||||
. Gruppenmitglieder: Wenn Sie eine Aufgabe erfüllt und den Pull-Request erstellt haben, dann können Sie eine weiter Aufgabe in Angriff nehmen. Erstellen Sie dazu einen neuen Fork, da Sie ja jetzt eine neue Aufgabe bearbeiten. Hat der Gruppenmanager schon eine neue Version hochgeladen, haben Sie auch alle Neuerungen im neuen Fork dabei (auch Ihre eigenen). Wählen Sie also eine weitere Aufgabe aus der obigen Liste aus oder denken Sie sich etwas eigenes aus.
|
||||
|
||||
== Mit ZPG-Materialien arbeiten (Verändern / Fehler melden usw.)
|
||||
Auch die Zusammenarbeit mit uns Fortbildnern soll in Zukunft über GIT vereinfacht werden: Sie können entweder Fehler und Anregungen an uns melden oder selbst Fehler beheben, Verbesserungen implementieren oder Texte überarbeiten.
|
||||
|
||||
. *Fehler melden:* Wählen Sie in Git-Camp das Repo mit unseren Fortbildungsmaterialien aus. Vielleicht haben Sie ja schon einen Tippfehler gefunden oder einen andere Ungenauigkeit festgestellt. Dann melden Sie dies nun. Wählen Sie den Reiter "Issues". Legen Sie einen neuen Issue an. Wenn Sie keinen Fehler gefunden haben, hinterlassen Sie einfach einen (netten) Kommentar für uns.
|
||||
+
|
||||
Dieser Issue kann an eine bestimmte Zeile im Code gebunden werden. Das erleichtert den Fortbildnerinnen die Arbeit. Dazu lassen Sie sich im Gitcamp den Quellcode einer Datei anzeigen, so dass links Zeilennummern zu sehen sind (Quellcode muss explizit rechts oben gewählt werden!). Dann kann in der fehlerhaften Zeile ganz links geklickt und ein Issue zu dieser Zeile erstellt werden.
|
||||
+
|
||||
image::bilder/BilderGitOnline/IssueInZeile.png[]
|
||||
|
||||
. *Fehler selbst beheben:* Sie sollen das bereitgestellte Dokument Asciidoc.adoc überarbeiten. Da ist mit der Formatierung noch einiges schief gelaufen. Arbeiten Sie bitte genauso wie in Übung 5 und erstellen Sie einen Fork der Materialien zu dieser Fortbildung, arbeiten Sie die Änderungen an Asciidoc.adoc ein und stellen Sie danach einen Pull-Request. Der oder diejenigen Veranwortlichen für die Materialien werden sich den Request anschauen und eine Rückmeldung geben. Wird er angenommen, haben Sie vielleicht für viele Lehrer zu einer Verbesserung des Unterrichts beigetragen. Sollte er abgelehnt werden, können Sie trotzdem ihre Änderungen selbst verwenden.
|
||||
+
|
||||
Sollte später einmal ein Request abgelehnt werden, müssen Sie trotzdem Änderungen der Originalmaterialien mit Ihren (abgelehnten) Änderungen zusammenführen. Sonst profitieren Sie entweder nicht mehr von den Verbesserungen am Originalmaterial oder verlieren Ihre eigenen Änderungen.
|
||||
+
|
||||
Führen Sie dazu folgende Schritte durch:
|
||||
|
||||
- Legen Sie lokal ein neues Remote-Verzeichnis mit dem Repo der Fortbildungsmaterialien an. Führen Sie dort einen Fetch durch und checken Sie dann den master-Branch des neues Remote-Verzeichnisses out. (Vgl. Übung 4) +
|
||||
- Wählen Sie ihren eigenen lokalen Master-Branch aus (check out). Dieser muss unbedingt fett geschrieben und mit einem Pfeil markiert sein! Wählen Sie dann im Kontext-Menü des Branches der Originalmaterialien den Menüpunkt "Merge" (Merge to Working Tree) aus. Dort müssen Sie nun gegebenenfalls Konflikte mit dem Conflict Solver lösen. +
|
||||
Schließen Sie den Merge-Prozess ab, indem Sie eine sinnvolle Commit-Message schreiben und die Änderungen sichern.
|
||||
|
||||
|
||||
674
GitKonsole.adoc
Normal file
|
|
@ -0,0 +1,674 @@
|
|||
= GIT auf der Konsole
|
||||
:authors: Frank Schiebel <frank.schiebel@quenstedt-gymnasium.de>, Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
include::kapitel-settings.adoc[]
|
||||
|
||||
NOTE: Quelle: Diese Dokumentation und die darin enthaltenen Bilder beruhen alle auf dem Material von Frank Schiebel (https://info-bw.de/faecher:informatik:oberstufe:git:start). Dort finden sich auch weitergehende Anleitungen für die Arbeit mit GIT auf der Konsole.
|
||||
|
||||
Nach der Installation von GIT stehen eine GIT-Konsole und eine einfache Git-GUI zur Verwaltung der Repositorys zur Verfügung. Für die produktiven Arbeit werden in der Regel in die Entwicklungsumgebungen (z. B. bei IntelliJ oder Visual Studio Code) integrierte GIT-Clients verwendet. Es gibt auch spezielle Git-Verwaltungsprogramme, die eine umfangreichere Verwaltung der GIT-Projekte zulassen (z. B. Git-Cola, Smart-Git).
|
||||
|
||||
Im Unterricht kann es sinnvoll sein, zunächst mit der GIT-Konsole zu starten. In der GIT-Konsole müssen alle Befehle von Hand eingetippt werden. Daher wird jeder Befehl mit mehr Bedacht ausgeführt. In einer GUI ist schnell mal ein falscher Klick gemacht, der nur schwer rückgängig gemacht werden kann. Hat man allerdings die Arbeitsweise von GIT verstanden, ist es wesentlich komfortabler, mit einer GUI zu arbeiten.
|
||||
|
||||
== Konfiguration
|
||||
|
||||
Bevor mit git gearbeitet werden kann, müssen Name und Mailadresse festgelegt werden. Dazu sind in einer Shell die folgenden Kommandos auszuführen. Unter Windows ist das Programm "Git Bash" zu starten, in Linux/MacOS reicht ein gewöhnliches Terminal aus. Name und Mailadresse sind durch passende Werte zu ersetzen.
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git config --global user.name "Max Mustermann"
|
||||
$ git config --global user.email max@example.org
|
||||
----
|
||||
|
||||
Sollte keine Berechtigung bestehen, diese Einstellungen systemweit ("global") vorzunehmen, z.B. an den PCs in der Schule, ist es erforderlich, sie für jedes Repository einzeln festzulegen, *nachdem* dieses initialisiert wurde:
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git config user.email "meine@mail.adresse.hier"
|
||||
$ git config user.name "John Doe"
|
||||
----
|
||||
|
||||
Diese Befehle speichern die Einstellungen nur für das Repository, in dem gerade gearbeitet wird. Für ein weiteres Repository muss die Email-Adresse erneut konfiguriert werden.
|
||||
|
||||
== Erste Schritte mils-t Git
|
||||
=== Initialisieren
|
||||
image::bilder/Konsole/gitbashOeffnen.png[float="right"]
|
||||
Um die Abläufe und die Funktionsweise zu erproben, soll zunächst ein Verzeichnis unter Versionskontrolle gestellt werden, in dem ein Tagebuch angelegt wird. Es wird also ein Verzeichnis `*tagebuch*` erstellt und dort ein Git-Repository initialisiert:
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git init
|
||||
Initialized empty Git repository in F:/Tagebuch/.git/
|
||||
----
|
||||
|
||||
Nun steht das Verzeichnis `*tagebuch*` unter Versionskontrolle. Das lokale Git-Repository befindet sich im Unterverzeichnis `*.git*`:
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ ls -la
|
||||
total 52
|
||||
drwxr-xr-x 1 XXX 197121 0 Oct 9 14:19 ./
|
||||
drwxr-xr-x 1 XXX 197121 0 Oct 9 14:18 ../
|
||||
drwxr-xr-x 1 XXX 197121 0 Oct 9 14:19 .git/
|
||||
----
|
||||
|
||||
=== Repository Status anzeigen lassen
|
||||
Das Verzeichnis `*tagebuch*` ist jetzt ein "git-Repository" - es wird von git "beobachtet", so dass Änderungen in diesem Verzeichnis und seinen Unterverzeichnissen nachverfolgt werden können. Mit dem Befehl `*git status*` kann der aktuelle Status des "Repos" angezeigt werdenfootnote:[Bei älteren git-Versionen heißt der Hauptbranch, der hier angezeigt wird, gelegentlich `master`, in diesem Fall muss man sich stets `main` durch `master` ersetzt denken.] :
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git status
|
||||
On branch main
|
||||
|
||||
No commits yet
|
||||
|
||||
nothing to commit (create/copy files and use "git add" to track)
|
||||
----
|
||||
|
||||
=== Ein erster Tagebucheintrag
|
||||
|
||||
Mit einem Texteditor (z. B. notepad++ bei Windows oder kate bei Linux, *nicht* mit Word oder Writer!) wird eine Datei `*aufstehen.txt*` angelegt. In diese Datei kann beispielsweise hineingeschrieben werden, wie geschlafen wurde und wann aufgestanden wurde. Wichtig ist, dass die Datei im Verzeichnis `*tagebuch*` abgespeichert wird.
|
||||
|
||||
image:bilder/Konsole/aufstehen.png[]
|
||||
|
||||
Das Tagebuch enthält nun einen Eintrag in `*aufstehen.txt*`. Es soll jetzt der Zustand des Tagebuchs an dieser Stelle so in der Versionsverwaltung festgehalten werden, dass er später wieder verwendet werden kann.
|
||||
|
||||
=== Ein erster Commit
|
||||
Um den git-Workflow zu verstehen, müssen drei Begriffe unterschieden werden: Das Arbeitsverzeichnis ("Working Directory"), die Staging Area ("Index") und das eigentliche Repository.
|
||||
|
||||
. *Arbeitsverzeichnis ("Working Directory"):* Das ist das Verzeichnis, welches zuvor mit `*git init*` unter Versionskontrolle gestellt wurde, mit allen seinen Dateien und Unterverzeichnissen, so wie es auf der Festplatte vorgefunden wird. Das "spezielle" Verzeichnis `*.git*` wird dabei ignoriert, es dient der internen Verwaltung der Abläufe durch git.
|
||||
. *Staging Area ("Index")*: In der Staging Area werden zunächst alle Dateien zusammengetragen, die in einem nächsten Schritt zu einem Snapshot zusammengefasst und im Repository gespeichert werden sollen. Es gibt zahlreiche Anwendungsfälle, bei denen nicht alle Änderungen des Arbeitsverzeichnisses in einem Snapshot festgehalten werden möchten: Es kann z.B. sinnvoll sein, die Änderungen auf mehrere Snapshots aufzuteilen oder Dateien auszuschließen, die gar nicht unter Versionskontrolle gestellt werden sollen, beispielsweise Compilate von Java Programmen (class-Dateien). Daher ist es sinnvoll, zunächst über die Staging Area auszuwählen, welche Dateien gesichert werden sollen.
|
||||
. *Repository:* Wenn in der Staging Area alle Dateien für den nächsten Snapshot zusammengestellt wurden, kann ein neuer Snapshot erstellt werden. Ein solcher Snapshot heißt *Commit* und wird durch einen Hashwert identifiziert, außerdem werden Metainformationen wie Zeit und Name des Commiters festgehalten. Ein Commit wird mit dem Befehl `*git commit*` durchgeführt. Bei einem Commit wird außerdem die Staging Area wieder geleert, da alle Änderungen, die dort vorgemerkt waren, in den Snapshot überführt wurden. Für den nächsten Commit müssen die Dateien dort wieder hinzugefügt werden.
|
||||
|
||||
image:bilder/Konsole/gitstagingcommit.png[]
|
||||
|
||||
=== Commit: Schritt für Schritt
|
||||
|
||||
Neue Dateien befinden sich zunächst "nur" im Arbeitsverzeichnis und werden von git ignoriert. Mit `*git status*` kann dies überprüft werden, solche Dateien tauchen dort in der Liste der "Unversionierten Dateien" auf, für das Tagebuch sieht das so aus:
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git status
|
||||
On branch main
|
||||
|
||||
No commits yet
|
||||
|
||||
Untracked files:
|
||||
(use "git add <file>..." to include in what will be committed)
|
||||
aufstehen.txt
|
||||
|
||||
nothing added to commit but untracked files present (use "git add" to track)
|
||||
----
|
||||
|
||||
Mit dem Befehl `*git add*` wird eine Datei im Index vorgemerkt - dies kann man sich wie ein Einkaufswagen vorstellen, in dem neue Dateien und Änderungen gesammelt werden, bis ein Punkt erreicht ist, den man sich "merken" möchte.
|
||||
|
||||
Im Folgenden wird die einzige Datei `*aufstehen.txt*` zum Index hinzugefügt:
|
||||
[listing]
|
||||
----
|
||||
$ git add aufstehen.txt
|
||||
$ git status
|
||||
On branch main
|
||||
|
||||
No commits yet
|
||||
|
||||
Changes to be committed:
|
||||
(use "git rm --cached <file>..." to unstage)
|
||||
new file: aufstehen.txt
|
||||
|
||||
----
|
||||
|
||||
image:bilder/Konsole/git_add.png[]
|
||||
|
||||
Wenn man mit den im Index vorgemerkten Änderungen zufrieden ist, kann ein "Commit" durchgeführt werden, um den Zustand aller im Index befindlichen Dateien zu speichern. Mit dem Befehl `*git commit -m "Erster Commit: aufstehen.txt angelegt"*` wird ein Commit mit einer Commit-Message angelegt (Parameter `*-m*`).
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git commit -m "Erster Commit: aufstehen.txt angelegt"
|
||||
[main (root-commit) 9eefa56] Erster Commit: aufstehen.txt angelegt
|
||||
1 file changed, 1 insertion(+)
|
||||
create mode 100644 aufstehen.txt
|
||||
----
|
||||
|
||||
image:bilder/Konsole/commit.png[]
|
||||
|
||||
Wenn der Status des Arbeitsverzeichnisses jetzt erneut abgefragt wird, erhält man folgende Ausgabe:
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git status
|
||||
On branch main
|
||||
nothing to commit, working tree clean
|
||||
----
|
||||
|
||||
image:bilder/Konsole/ersterCommit.png[float="right"]
|
||||
|
||||
Man erkennt, dass der Index wieder leer ist ("nichts zum Commit vorgemerkt"). Nun können weitere Änderungen im Tagebuch vorgenommen werden und zu allen wichtigen Zeitpunkten der Zustand der Dateien in einem Commit festgehalten werden.
|
||||
|
||||
=== Frühstück
|
||||
|
||||
*Aufgabe:*
|
||||
|
||||
. Halten Sie in der Datei `*fruehstueck.txt*` fest, was es zum Frühstück gab.
|
||||
. Kontrollieren Sie mit `*git status*`, dass die Datei jetzt existiert, sie jedoch noch nicht unter Versionskontrolle steht.
|
||||
. Fügen Sie die Datei `*fruehstueck.txt*` mit dem Befehl `*git add fruehstueck.txt*` zum Index hinzu.
|
||||
. Erstellen Sie einen Commit für das Frühstück. Vergessen Sie die Commit-Message nach der Option `*-m*` nicht.
|
||||
. Überprüfen Sie den Zustande des Repositorys erneut.
|
||||
|
||||
Es wurde nun ein zweiter Commit erstellt:
|
||||
|
||||
image:bilder/Konsole/zweitercommit2.png[]
|
||||
|
||||
NOTE: Es wurde zwar nur die Datei `*fruehstueck.txt*` zum Commit vorgemerkt und anschließend mit `*git commit*` "commited", *ein Commit beinhaltet jedoch stets den Zustand aller unter Versionskontrolle stehender Dateien im Arbeitsverzeichnis*, in diesem Fall ist in dem zweiten Commit also auch die (unveränderte) Datei `*aufstehen.txt*` enthalten!
|
||||
|
||||
Ein Commit kann also wie im Bild dargestellt als Archivbox betrachtet werden, in dem jeweils der Zustand aller versionierten Dateien festgehalten ist. Ein Commit wird durch einen hexadezimalen "Hashwert" identifiziert, das ist gewissermaßen die eindeutige Nummer eines Commits, z.B. `2f40bf7`. Mit dem Befehl `*git log*` können die Commits aufgelistet werden:
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git log
|
||||
commit 2f40bf7011e453259db1621014979353003262df (HEAD -> main)
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 14:35:50 2024 +0200
|
||||
|
||||
Frühstück in Datei 'fruehstueck.txt' hinzugefügt
|
||||
|
||||
commit 9eefa5687ebae993ce5b7ca0f597159418f1d7cd
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 14:31:24 2024 +0200
|
||||
|
||||
Erster Commit: aufstehen.txt angelegt
|
||||
----
|
||||
|
||||
image:bilder/Konsole/zweiterCommit.png[float="right"]
|
||||
Man erkennt hier auch, dass die eigentlichen Commit-Hashes sehr viel länger sind, als das Beispiel oben vermuten lässt; für die Identifizierung eines Commits reichen die ersten 7 Stellen des Hashes aus.
|
||||
|
||||
=== Mittagessen
|
||||
|
||||
*Aufgabe:*
|
||||
|
||||
. Fügen Sie dem Tagebuch den Eintrag `*mittagessen.txt*` als Datei hinzu, zunächst ohne diese zu versionieren.
|
||||
. Ändern Sie die Datei `*fruehstueck.txt*` und schreiben Sie zusätzlich `*Schokolade*` in die Datei.
|
||||
. Überprüfen Sie mit `*git status*` den Zustand des Repositorys. Das Repo sollte ungefähr so aussehen:
|
||||
+
|
||||
[listing]
|
||||
----
|
||||
$ git status
|
||||
On branch main
|
||||
Changes not staged for commit:
|
||||
(use "git add <file>..." to update what will be committed)
|
||||
(use "git restore <file>..." to discard changes in working directory)
|
||||
modified: fruehstueck.txt
|
||||
|
||||
Untracked files:
|
||||
(use "git add <file>..." to include in what will be committed)
|
||||
mittagessen.txt
|
||||
|
||||
no changes added to commit (use "git add" and/or "git commit -a")
|
||||
----
|
||||
|
||||
Es wurden jetzt *zwei* Dinge geändert: In der Datei `*fruehstueck.txt*` wurde eine Änderung vorgenommen. Die Datei `*mittagessen.txt*` wurde neu hinzugefügt.
|
||||
|
||||
Wenn nun der nächste Commit vorbereitet wird, kann mit dem Befehl `*git add*` wieder ausgewählt werden, welche Änderungen in den Commit übernommen werden. Um dies zu demonstrieren, werden die beiden vorgenommenen Änderungen im Folgenden auf zwei Commits aufgeteilt.
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git add fruehstueck.txt
|
||||
|
||||
$ git status
|
||||
On branch main
|
||||
Changes to be committed:
|
||||
(use "git restore --staged <file>..." to unstage)
|
||||
modified: fruehstueck.txt
|
||||
|
||||
Untracked files:
|
||||
(use "git add <file>..." to include in what will be committed)
|
||||
mittagessen.txt
|
||||
|
||||
----
|
||||
|
||||
Jetzt wurden die Änderungen von `*fruehstueck.txt*` für den nächsten Commit vorgemerkt, die neue Datei `*mittagessen.txt*` wird allerdings nicht in diesen übernommen. Mit `*git commit -m "fruehstueck.txt geändert"*` wird der Commit ausgeführt:
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git commit -m "fruehstueck.txt geändert"
|
||||
[main 1c669a2] fruehstueck.txt geändert
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
$ git status
|
||||
On branch main
|
||||
Untracked files:
|
||||
(use "git add <file>..." to include in what will be committed)
|
||||
mittagessen.txt
|
||||
|
||||
nothing added to commit but untracked files present (use "git add" to track)
|
||||
----
|
||||
|
||||
Für den nächsten Commit wird jetzt die Datei `*mittagessen.txt*` übernommen:
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git add mittagessen.txt
|
||||
|
||||
$ git commit -m "Mittagessen hinzugefügt"
|
||||
[main 311cb29] Mittagessen hinzugefügt
|
||||
1 file changed, 1 insertion(+)
|
||||
create mode 100644 mittagessen.txt
|
||||
|
||||
$ git status
|
||||
On branch main
|
||||
nothing to commit, working tree clean
|
||||
----
|
||||
|
||||
image:bilder/Konsole/mittagessen.png[float="right"]
|
||||
|
||||
Sie können nun Dateien selektiv in einem Verzeichnis unter Versionskontrolle stellen. Mit jedem Commit wird ein *Snapshot* des Zustands erzeugt, den die versionierten Dateien zum Zeitpunkt des Commits haben. Dateien, die nicht mit `*git add*` unter Versionskontrolle gestellt wurden, werden von git nicht beachtet. Im folgenden Kapitel wird die Versionsgeschichte genauer untersucht und Zeitsprünge durchgeführt, um ältere Versionen zu betrachten.
|
||||
|
||||
== Versionshistorie untersuchen
|
||||
|
||||
=== Blick in die Vergangenheit
|
||||
Nachdem einige Commits gemacht wurden, kann nun das Repository untersucht werden:
|
||||
|
||||
image:bilder/Konsole/aktuell.png[float="right"]
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git log
|
||||
commit 311cb296f5c7099ed88cfa6336c089eb03ddbb35 (HEAD -> main)
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 15:09:01 2024 +0200
|
||||
|
||||
Mittagessen hinzugefügt
|
||||
|
||||
commit 1c669a21d0b0ad1422e285a745780d7e99c9034e
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 15:07:56 2024 +0200
|
||||
|
||||
fruehstueck.txt geändert
|
||||
|
||||
commit 2f40bf7011e453259db1621014979353003262df
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 14:35:50 2024 +0200
|
||||
|
||||
Frühstück in Datei 'fruehstueck.txt' hinzugefügt
|
||||
|
||||
commit 9eefa5687ebae993ce5b7ca0f597159418f1d7cd
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 14:31:24 2024 +0200
|
||||
|
||||
Erster Commit: aufstehen.txt angelegt
|
||||
----
|
||||
|
||||
Es werden einige Informationen für jedem Zeitpunkt angezeigt, an dem ein Snapshot der unter Versionskontrolle stehenden Dateien im Arbeitsverzeichnis erstellt wurde:
|
||||
|
||||
- Den Hashwert des Commits
|
||||
- Den Autor
|
||||
- Datum und Zeit, zu der der Snapshot erstellt wurde
|
||||
- Commit-Message
|
||||
|
||||
Außerdem wird durch den Zeiger `*HEAD*` angezeigt, in welchem Zustand sich das Arbeitsverzeichnis befindet.
|
||||
|
||||
=== Änderungen zwischen Commits ansehen
|
||||
|
||||
Um den Unterschied des aktuellen Arbeitsstandes (HEAD) zu vorhergehenden zu untersuchen, kann folgender Befehl verwendet werden: `*git diff HEAD~1*`. Dies bedeutet: "Zeige alle Unterschiede im Verzeichnis zwischen dem Commit, auf den HEAD gerade zeigt, und dem vorigen Commit" - die Ausgabe ist zunächst etwas gewöhnungsbedürftig:
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git diff head~1
|
||||
diff --git a/mittagessen.txt b/mittagessen.txt
|
||||
new file mode 100644
|
||||
index 0000000..54777bb
|
||||
--- /dev/null
|
||||
+++ b/mittagessen.txt
|
||||
@@ -0,0 +1 @@
|
||||
+Blumenkohl
|
||||
\ No newline at end of file
|
||||
----
|
||||
|
||||
Die Ausgabe sagt, dass in der Datei mittagessen.txt neu angelegt wurde und in diese eine Zeile eingefügt wurde: Blumenkohl.
|
||||
|
||||
Der Vergleich kann auch mit weiter zurückliegenden Commits durchgeführt werden: z. B. zwei Commits in die Vergangenheit: `*git diff HEAD~2*`:
|
||||
[listing]
|
||||
----
|
||||
$ git diff head~2
|
||||
diff --git a/fruehstueck.txt b/fruehstueck.txt
|
||||
index 307fc9b..b7a56aa 100644
|
||||
--- a/fruehstueck.txt
|
||||
+++ b/fruehstueck.txt
|
||||
@@ -1,3 +1,4 @@
|
||||
Müsli
|
||||
Kaffee
|
||||
-Brot
|
||||
\ No newline at end of file
|
||||
+Brot^M
|
||||
+Schokolade
|
||||
\ No newline at end of file
|
||||
diff --git a/mittagessen.txt b/mittagessen.txt
|
||||
new file mode 100644
|
||||
index 0000000..54777bb
|
||||
--- /dev/null
|
||||
+++ b/mittagessen.txt
|
||||
@@ -0,0 +1 @@
|
||||
+Blumenkohl
|
||||
\ No newline at end of file
|
||||
----
|
||||
|
||||
Die Ausgabe sagt, dass in den letzten zwei Commits bis zum aktuellen HEAD die folgenden Änderungen im Repo stattgefunden haben:
|
||||
|
||||
Es wurde eine neue Datei angelegt - mittagessen.txt und in diese eine Zeile eingefügt: Blumenkohl.
|
||||
In der zuvor bereits vorhandenen Datei fruehstueck.txt wurde nach den drei schon vorhandenen Zeilen eine weitere Zeile Schokolade eingefügt. Am Ende der Zeile Brot wurde außerdem ein Zeilenumbruch hinzugefügt.
|
||||
|
||||
|
||||
*Aufgabe:*
|
||||
|
||||
. Untersuchen Sie die Unterschiede in Ihrem Repo zwischen dem HEAD auf main und einigen vorigen Commits.
|
||||
. Erstellen Sie auf dem main Branch einen weiteren Commit, bei dem in einer Ihrer Dateien eine Zeile entfernt wird. Untersuchen Sie, wie die Ausgabe von git diff jetzt aussieht - woran erkennt man, dass die Zeile entfernt wurde?
|
||||
. Erstellen Sie einen Commit, bei dem eine Datei entfernt wird (git rm <Dateiname>, dann einen Commit erstellen). Untersuchen Sie, wie die Ausgabe von git diff jetzt aussieht.
|
||||
|
||||
Für eine bessere Darstellung der Unterschiede sollte eine GUI für GIT genutzt werden.
|
||||
|
||||
image:bilder/Konsole/diff.png[]
|
||||
|
||||
=== Reise in die Vergangenheit
|
||||
|
||||
IMPORTANT: Man sollte nur dann zu einem älteren Stand der Dateien zurückkehren, wenn das Arbeitsverzeichnis keine nicht committeten Änderungen beinhaltet. ("Sauberes Arbeitsverzeichnis")
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git status
|
||||
On branch main
|
||||
nothing to commit, working tree clean
|
||||
----
|
||||
|
||||
Der Zustand des Arbeitsverzeichnisses kann aus den Commits wiederhergestellt werden. Es ist also möglich, das Arbeitsverzeichnis in genau den Zustand zurückzuversetzen, in dem es beim Commit `2f40bf7011e453259db1621014979353003262df` - "Frühstück in Datei 'fruehstueck.txt' hinzugefügt" war – oder eben zu jedem anderen Zeitpunkt, an dem der Zustand des Arbeitsverzeichnisses als Snapshot commitet wurde. Der Befehl dazu ist `*git checkout <Commit-Hash>*`. Es reicht dabei, die ersten 7 Zeichen des Hashwertes, z.B. `2f40bf7`, anzugeben:
|
||||
|
||||
image:bilder/Konsole/vergangenheit.png[float="right"]
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git log
|
||||
commit 311cb296f5c7099ed88cfa6336c089eb03ddbb35 (HEAD -> main)
|
||||
...
|
||||
commit 2f40bf7011e453259db1621014979353003262df
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 14:35:50 2024 +0200
|
||||
|
||||
Frühstück in Datei 'fruehstueck.txt' hinzugefügt
|
||||
...
|
||||
|
||||
$ git checkout 2f40bf7
|
||||
Note: switching to '2f40bf7'.
|
||||
|
||||
You are in 'detached HEAD' state. You can look around, make experimental
|
||||
changes and commit them, and you can discard any commits you make in this
|
||||
state without impacting any branches by switching back to a branch.
|
||||
|
||||
If you want to create a new branch to retain commits you create, you may
|
||||
do so (now or later) by using -c with the switch command. Example:
|
||||
git switch -c <new-branch-name>
|
||||
|
||||
Or undo this operation with:
|
||||
git switch -
|
||||
|
||||
Turn off this advice by setting config variable advice.detachedHead to false
|
||||
|
||||
HEAD is now at 2f40bf7 Frühstück in Datei 'fruehstueck.txt' hinzugefügt
|
||||
|
||||
$ git status
|
||||
HEAD detached at 2f40bf7
|
||||
nothing to commit, working tree clean
|
||||
----
|
||||
|
||||
Was ist denn jetzt passiert?
|
||||
|
||||
image:bilder/Konsole/checkout.png[float="right"]
|
||||
|
||||
. Zunächst einmal befinden sich die Dateien im Verzeichnis jetzt in dem Zustand, in dem sie waren, als der Commit `2f40bf7` erstellt wurde. Überprüfen Sie das.
|
||||
|
||||
. Der HEAD ist zum Commit `2f40bf7` gewandert. HEAD ist ein Zeiger. Er springt in gewisser Weise in der Versionsgeschichte herum und zeigt immer auf denjenigen Commit, der im Arbeitsverzeichnis gerade "ausgecheckt" ist.
|
||||
|
||||
. Die Versionsgeschichte ist kürzer geworden: +
|
||||
+
|
||||
[listing]
|
||||
----
|
||||
$ git log
|
||||
commit 2f40bf7011e453259db1621014979353003262df (HEAD)
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 14:35:50 2024 +0200
|
||||
|
||||
Frühstück in Datei 'fruehstueck.txt' hinzugefügt
|
||||
|
||||
commit 9eefa5687ebae993ce5b7ca0f597159418f1d7cd
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 14:31:24 2024 +0200
|
||||
|
||||
Erster Commit: aufstehen.txt angelegt
|
||||
----
|
||||
+
|
||||
Git zeigt mit `*git log*` standardmäßig die Versionsgeschichte an, die zu dem Commit geführt hat, den man im Arbeitsverzeichnis gerade angezeigt bekommt. Die anderen Commits sind jedoch nicht verloren. Die Option `*--all*` zeigt dies. Es kann also auch in die Gegenwart zurückgekehrt werden. +
|
||||
+
|
||||
[listing]
|
||||
----
|
||||
commit 311cb296f5c7099ed88cfa6336c089eb03ddbb35 (main)
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 15:09:01 2024 +0200
|
||||
|
||||
Mittagessen hinzugefügt
|
||||
|
||||
commit 1c669a21d0b0ad1422e285a745780d7e99c9034e
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 15:07:56 2024 +0200
|
||||
|
||||
fruehstueck.txt geändert
|
||||
|
||||
commit 2f40bf7011e453259db1621014979353003262df (HEAD)
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 14:35:50 2024 +0200
|
||||
|
||||
Frühstück in Datei 'fruehstueck.txt' hinzugefügt
|
||||
|
||||
commit 9eefa5687ebae993ce5b7ca0f597159418f1d7cd
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 14:31:24 2024 +0200
|
||||
|
||||
Erster Commit: aufstehen.txt angelegt
|
||||
----
|
||||
|
||||
image:bilder/Konsole/checkout2.png[float="right"]
|
||||
Neben dem HEAD gibt es einen weiteren Zeiger `*main*`, der auf den aktuellen Stand der Arbeitfootnote:[Genau genommen zeigt `*main*` auf den aktuellen Stand des Branches mit dem Namen main; arbeitet man mit mehreren Branches, gibt es weitere Zeiger.] zeigt - hier auf den Commit `311cb29`.
|
||||
|
||||
*Aufgabe:*
|
||||
|
||||
. Wechseln Sie durch einen Checkout zu den verschiedenen Zeitpunkten in der Versionsgeschichte und untersuchen Sie, welche Dateien vorhanden sind und welchen Text sie enthalten.
|
||||
|
||||
=== Manipulation der Vergangenheit
|
||||
|
||||
Was passiert, wenn nun die Vergangenheit geändert wird? Welche Auswirkungen hat dies auf die aktuelle Gegenwart? Die Antwort auf die zweite Frage ist kurz: keine! Wenn in der Versionsgeschichte zurückgegangen und Änderungen durchgeführt werden, wird immer eine parallele Zeitschiene begonnen. Diese parallele Zeitschiene hat eine neue Zukunft. Jede Zeitschiene ist ein sogenannter *Branch*. `*Main*` ist der Name des Standard-Branches. In der Schule sollte man nicht mit mehreren Branches arbeiten, da dies leicht zur Verwirrung führen kann.
|
||||
|
||||
Wenn mit checkout in die Vergangenheit zurückgekehrt wird, wird lediglich der HEAD verschoben. Es wird kein neuer Branch erstellt. Der HEAD ist also losgelöst (*detached HEAD*) von einem Branch. Man kann sich umsehen und auch Dateien verändern; wenn anschließend jedoch wieder in der Versiongeschichte "gesprungen" wird, gehen diese Änderungen verloren.
|
||||
|
||||
Wenn eine neue Zeitschiene begonnen wird, kann man sich entscheiden, was mit der aktuellen Zeitschiene passieren soll:
|
||||
|
||||
. Sie ist weiterhin verfügbar, dann muss aber ein neuer Branch abgezweigt werden. (git switch)
|
||||
. Sie wird gelöscht und steht nicht mehr zur Verfügung (git reset).
|
||||
|
||||
|
||||
*Variante 1 (nur für Experten zu empfehlen): neuer Branch*
|
||||
[listing]
|
||||
----
|
||||
$ git switch -c "neueChance"
|
||||
Switched to a new branch 'neueChance'
|
||||
$ git log --all
|
||||
commit 311cb296f5c7099ed88cfa6336c089eb03ddbb35 (main)
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 15:09:01 2024 +0200
|
||||
|
||||
Mittagessen hinzugefügt
|
||||
|
||||
commit 1c669a21d0b0ad1422e285a745780d7e99c9034e
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 15:07:56 2024 +0200
|
||||
|
||||
fruehstueck.txt geändert
|
||||
|
||||
commit 2f40bf7011e453259db1621014979353003262df (HEAD -> neueChance)
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 14:35:50 2024 +0200
|
||||
|
||||
Frühstück in Datei 'fruehstueck.txt' hinzugefügt
|
||||
|
||||
commit 9eefa5687ebae993ce5b7ca0f597159418f1d7cd
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 14:31:24 2024 +0200
|
||||
|
||||
Erster Commit: aufstehen.txt angelegt
|
||||
----
|
||||
|
||||
image:bilder/Konsole/neuerBranch.png[float="right"]
|
||||
Neben main gibt es jetzt auch noch den Branch "neueChance". Der HEAD zeigt auf diesen Branch. Damit können Änderungen nun in diesem Branch commited werden. Eine parallele Zeitschiene beginnt. Mit `*git switch <branchname>*` kann zwischen den verschiedenen Zeitschienen hin- und hergewechselt werden.
|
||||
|
||||
|
||||
|
||||
*Variante 2: die aktuelle Zeitschiene löschen*
|
||||
Soll unwiderruflich zu einem alten Arbeitsstand zurückgekehrt werden, können die letzten Änderungen verworfen werden:
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git reset --hard 2f40bf7
|
||||
HEAD is now at 2f40bf7 Frühstück in Datei 'fruehstueck.txt' hinzugefügt
|
||||
|
||||
$ git log --all
|
||||
commit 2f40bf7011e453259db1621014979353003262df (HEAD -> main)
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 14:35:50 2024 +0200
|
||||
|
||||
Frühstück in Datei 'fruehstueck.txt' hinzugefügt
|
||||
|
||||
commit 9eefa5687ebae993ce5b7ca0f597159418f1d7cd
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Wed Oct 9 14:31:24 2024 +0200
|
||||
|
||||
Erster Commit: aufstehen.txt angelegt
|
||||
----
|
||||
|
||||
image:bilder/Konsole/reset.png[float="right"]
|
||||
Der HEAD ist nicht losgelöst, da er weiterhin auf main zeigt. Die nachfolgenden Commits sind nicht mehr vorhanden und daher auch bei der Option `--all` nicht mehr zu sehen.
|
||||
|
||||
== Speichern in der Cloud
|
||||
|
||||
Zunächst ist ein Git-Repo eine vollkommen lokale Angelegenheit - alle wichtigen Informationen und die Snapshots werden im .git-Verzeichnis gespeichert.
|
||||
|
||||
Um besser zusammenarbeiten zu können, ist es möglich, ein Repo über einen Cloud-Speicher anderen zur Verfügung zu stellen. Das Land Baden-württemberg stellt für diesen Zweck eine datenschutzkonforme Plattform "Gitcamp" bereit.
|
||||
|
||||
image:bilder/Konsole/workflow.png[]
|
||||
|
||||
=== Klonen eines Repositorys
|
||||
Ein so veröffentlichtes Repo kann man "klonen". Dabei wird ein Repository aus der Cloud auf den eigenen Computer kopiert. Es wird in ein Unterverzeichnis kopiert, das genauso heißt, wie das Repository. Git merkt sich, von welcher Quelle das Repository stammt (origin) und auf welchem Arbeitsstand die Quelle ist (origin/main, origin/HEAD).
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git clone https://fortierung.gitcamp-bw.de/Thomas.Schaller/UebungVorlage Cloning into 'UebungVorlage'...
|
||||
remote: Enumerating objects: 4, done.
|
||||
remote: Counting objects: 100% (4/4), done.
|
||||
remote: Compressing objects: 100% (3/3), done.
|
||||
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
|
||||
Receiving objects: 100% (4/4), 7.17 KiB | 152.00 KiB/s, done.
|
||||
|
||||
$ git log
|
||||
commit 33f53e800b45c072c1d914b2ab0c0a55e5abf977 (HEAD -> main, origin/main, origin/HEAD)
|
||||
Author: Thomas Schaller <thomas.schaller@noreply.Domain>
|
||||
Date: Tue Oct 1 09:57:04 2024 +0200
|
||||
|
||||
Initial commit
|
||||
----
|
||||
|
||||
Der Begriff des Klonens ist hier wörtlich zu nehmen - jetzt existiert eine vollständige Kopie des Repos auf dem lokalen Rechner, die alle Commits des ursprünglichen Repos nachverfolgbar enthält.
|
||||
|
||||
=== Änderung auf den Server zurückkopieren
|
||||
Nun kann man mit dem Repo lokal ganz normal arbeiten, der wesentliche Unterschied zum ausschließlich "lokalen" Repository ist, dass dieses Repository "weiss", woher es kommt – das ermöglicht es, Änderungen auch wieder auf den entfernten Server zurück zu übertragen. Der dazu verwendete Befehl lautet `*git push*`.
|
||||
|
||||
Zunächst bearbeitet man lokal Dateien im Repo und erzeugt einen (oder mehrere Commits) :
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git log
|
||||
commit d81cb957d62bccb2f68378aea7f6232fc2f81026 (HEAD -> main)
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Mon Oct 14 16:40:29 2024 +0200
|
||||
|
||||
Neue Datei angelegt
|
||||
|
||||
commit 33f53e800b45c072c1d914b2ab0c0a55e5abf977 (origin/main, origin/HEAD)
|
||||
Author: Thomas Schaller <thomas.schaller@noreply.Domain>
|
||||
Date: Tue Oct 1 09:57:04 2024 +0200
|
||||
|
||||
Initial commit
|
||||
----
|
||||
|
||||
Das Cloud-Verzeichnis (origin) bleibt dabei auf dem vorherigen Stand. Nur das lokale Repository (HEAD->main) kennt die Änderungen. Durch einen push werden diese Änderungen hochgeladen (origin ist nun auch auf dem neusten Stand):
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git push
|
||||
Enumerating objects: 4, done.
|
||||
Counting objects: 100% (4/4), done.
|
||||
Delta compression using up to 4 threads
|
||||
Compressing objects: 100% (2/2), done.
|
||||
Writing objects: 100% (3/3), 324 bytes | 162.00 KiB/s, done.
|
||||
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
|
||||
To https://fortbildung.gitcamp-bw.de/Thomas.Schaller/UebungVorlage
|
||||
33f53e8..d81cb95 main -> main
|
||||
|
||||
$ git log
|
||||
commit d81cb957d62bccb2f68378aea7f6232fc2f81026 (HEAD -> main, origin/main, origin/HEAD)
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Mon Oct 14 16:40:29 2024 +0200
|
||||
|
||||
Neue Datei angelegt
|
||||
|
||||
commit 33f53e800b45c072c1d914b2ab0c0a55e5abf977
|
||||
Author: Thomas Schaller <thomas.schaller@noreply.Domain>
|
||||
Date: Tue Oct 1 09:57:04 2024 +0200
|
||||
|
||||
Initial commit
|
||||
----
|
||||
|
||||
Damit landen die Änderungen auf dem Server, von dem das Repo zuvor geklont wurde. Es darf aber natürlich nicht jeder auf jedes im Internet zugänglich Repository Änderung zurückspielen, sondern nur diejenigen, die dazu berechtigt sind.
|
||||
|
||||
Andere Personen oder man selbst an einem anderen Rechner kann diese Änderungen nun herunterladen und in das eigene, vorher geklonte Repository integrieren. Dazu gibt es den Befehl `*git pull*`.
|
||||
|
||||
[listing]
|
||||
----
|
||||
$ git pull
|
||||
remote: Enumerating objects: 5, done.
|
||||
remote: Counting objects: 100% (5/5), done.
|
||||
remote: Compressing objects: 100% (2/2), done.
|
||||
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
|
||||
Unpacking objects: 100% (3/3), 260 bytes | 9.00 KiB/s, done.
|
||||
From https://fortbildung.gitcamp-bw.de/Thomas.Schaller/UebungVorlage
|
||||
d81cb95..2ce4edf main -> origin/main
|
||||
Updating d81cb95..2ce4edf
|
||||
Fast-forward
|
||||
neu.txt | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
$ git log
|
||||
commit 2ce4edf2df9254891d16dce195dc0a51fc0db357 (HEAD -> main, origin/main, origin/HEAD)
|
||||
Author: Thomas.Schaller <thomas.schaller@noreply.Domain>
|
||||
Date: Mon Oct 14 16:48:51 2024 +0200
|
||||
|
||||
neu.txt aktualisiert
|
||||
|
||||
commit d81cb957d62bccb2f68378aea7f6232fc2f81026
|
||||
Author: Thomas Schaller <thomas.schaller@zsl-rska.de>
|
||||
Date: Mon Oct 14 16:40:29 2024 +0200
|
||||
|
||||
Neue Datei angelegt
|
||||
|
||||
commit 33f53e800b45c072c1d914b2ab0c0a55e5abf977
|
||||
Author: Thomas Schaller <thomas.schaller@noreply.Domain>
|
||||
Date: Tue Oct 1 09:57:04 2024 +0200
|
||||
|
||||
Initial commit
|
||||
----
|
||||
Hier wurden von einer anderen Person an der Datei `neu.txt` Änderungen vorgenommen und gepusht. Diese Änderungen stehen nun im lokalen Repository auch zur Verfügung und werden sofort in das Arbeitsverzeichnis kopiert. (HEAD -> main, origin/main, origin/HEAD zeigen alle auf den gleichen Commit). Der Befehl `*git fetch*` lädt das Repository auch herunter, überträgt die Änderungen aber nicht sofort ins Arbeitsverzeichnis.
|
||||
|
||||
WARNING: Nehmen mehrere Personen gleichzeitig Änderungen an einem Repository vor, kommt es in der Regel zu sogenannten Konflikten: mehrere Personen haben die gleiche Datei bearbeitet. Die verschiedenen Versionen müssen nun zusammengeführt werden (merge). Als Git-Neuling sollte man diesem Problem aus dem Weg gehen, indem man zunächst alleine an einem Repository arbeitet und bei der Arbeit an mehreren Rechnern, vor jedem Arbeitsschritt ein Pull durchführt und am Ende einer Arbeitsphase sofort einen Push macht.
|
||||
|
||||
|
||||
418
GitLokal.adoc
Normal file
|
|
@ -0,0 +1,418 @@
|
|||
|
||||
= Umgang mit Git am lokalen PC
|
||||
:author: Thomas Niesenhaus <thomas.niesenhaus@zsl-rska.de>
|
||||
:author: Patrick Gerth <patrick.gerth@zsl-rss.de>
|
||||
include::kapitel-settings.adoc[]
|
||||
|
||||
|
||||
== Clienten
|
||||
|
||||
Zum Zeitpunkt des Erstellens dieser Materialien bieten sich verschiedene Lösungen für Desktopanwendungen an. Beispiele wären hier:
|
||||
|
||||
* GitButler, welches unter https://gitbutler.com/[] erreichbar ist und open source eingesehen werden kann.
|
||||
|
||||
* GitHub Desktop ist unter https://desktop.github.com/download/[] verfügbar und ebenfalls open source.
|
||||
|
||||
* SmartGit ist ein kommerzielles Produkt aus dem Hause Syntevo. Die Projektseite findet sich unter https://www.syntevo.com/smartgit/[]
|
||||
|
||||
=== GitButler
|
||||
Nach der Installation findet man sich im Startfenster von GitButler.
|
||||
|
||||
.Dialogfeld Neuanlegung
|
||||
image::bilder/GitButler/GitButlerIntro.png[]
|
||||
|
||||
==== Repository eröffnen/ klonen
|
||||
GitButler kann zum Zeitpunkt der Erstellung dieses Dokuments Repositories nur verwalten, nicht frisch anlegen. Daher wäre der Ablauf der, dass man zunächst ein Repository in der Webmaske erstellt und dieses dann via "Clone repository" auf den lokalen Rechner klont. GitButler tut sich erfahrungsgemäß schwer damit leere Repositories zu klonen. Um dies zu umgehen kann man eine leere Textdatei in der Online-Ansicht des Repositories anlegen.
|
||||
|
||||
.Dialogfeld Klonen
|
||||
image::bilder/GitButler/GitButlerClone.png[]
|
||||
|
||||
Im Anschluss öffnet sich die Hauptansicht.
|
||||
|
||||
==== Hauptansicht
|
||||
|
||||
.Hauptansicht
|
||||
image::bilder/GitButler/GitButlerMainView.png[]
|
||||
|
||||
Hier lassen sich verschiedene Branches anlegen, in welche die entsprechenden Dateien per drag-and-drop hineingezogen werden können:
|
||||
|
||||
.Branch-Ansicht
|
||||
image::bilder/GitButler/GitButlerBranches.png[]
|
||||
|
||||
Für eine detaillierte Führung durch die Benutzung empfiehlt sich ein Blick in die Dokumentation unter https://docs.gitbutler.com/[]
|
||||
|
||||
==== Mergekonflikte
|
||||
In seiner aktuellen Fassung (Stand 10.09.2024) verfügt Gitbutler nur über sehr eingeschränkte Möglichkeiten Mergekonflikte zu lösen. Statt dessen wird jedes mal lokal ein neuer Entwicklungsbranch (Virtualbranch) angelegt, welcher dann per Konsole oder Webanwendung wieder gemerged werden muss.
|
||||
|
||||
.Branch-Ansicht mit Virtual branch
|
||||
image::bilder/GitButler/Neuer Commit.png[]
|
||||
|
||||
=== SmartGit
|
||||
|
||||
==== Repository eröffnen
|
||||
Nach der Installation und dem Einstellen der Initialparameter findet sich die Einstellung zum Einbinden eines neuen Repositories oben links.
|
||||
|
||||
.Neues Repository anlegen oder abrufen
|
||||
image::bilder/SmartGit/SmartGitNew.png[]
|
||||
|
||||
Durch Clicken der Option öffnet sich ein neues Dialogfeld:
|
||||
|
||||
.Dialogfeld Neuanlegung
|
||||
image::bilder/SmartGit/SmartGitNew2.png[]
|
||||
|
||||
Wählen Sie hier einen Speicherort für das entsprechende Repository aus. Der Ordner sollte im Regelfall leer sein.
|
||||
|
||||
Durch das Auswählen von "Remote" in der Leiste am oberen Rand lässt sich eine Verknüpfung zu einem leeren Repository auf dem Git-Server anlegen
|
||||
|
||||
.Repository auf Server auswählen
|
||||
image::bilder/SmartGit/SmartgitNew3.png[]
|
||||
|
||||
Nach der Authentifizierung sind nun die beiden Repositories verknüpft und lassen sich fortan vollumfänglich benutzen.
|
||||
|
||||
.Pull-Optionen bei vollständiger Verknüpfung
|
||||
image::bilder/SmartGit/SmartgitNew4.png[]
|
||||
|
||||
==== Repository klonen
|
||||
Möchten Sie ein bestehendes Repository auf Ihren lokalen Rechner übertragen sprechen wir ja bekanntlich vom Klonen. Über Repositoy -> Clone öffnet sich die Dialogmaske zum Eintragen des entsprechenden Links.
|
||||
|
||||
.Auswahl der Clone-Option
|
||||
image::bilder/SmartGit/SmartgitRepoClone1.png[]
|
||||
|
||||
.Clone-Dialog
|
||||
image::bilder/SmartGit/SmartgitRepoClone2.png[]
|
||||
|
||||
Da die beiden Optionen selbsterklärend sind wird nicht weiter darauf eingegangen. Die folgenden Dialoge fragen danach nach dem Speicherort und den Klonoptionen. Sobald dies ausgewählt wurde öffnet sich das Projekt im Betrachter.
|
||||
|
||||
==== Übersichten
|
||||
Nachdem das entsprechende Repository erfolgreich in SmartGit eingebunden wurde bietet es sich an zwischen den entsprechenden Hauptansichten zu wählen.
|
||||
|
||||
.Hauptansichten
|
||||
image::bilder/SmartGit/SmartgitViews.png[]
|
||||
|
||||
* Local Files dient dabei dazu, die Dateien direkt zu verwalten. Hier sieht man eine Übersicht der Dateien seit dem letzten Pull und kann entscheiden welche Dateien damit im nächsten Commit landen.
|
||||
* History zeigt den Branchverlauf der letzten Commits und deren entsprechenden Branches. Durch Anklicken der entsprechenden Commits wird ein sog. Dif erstellt, welches die Veränderungen durch den entsprechenden Commit darstellt. Gelöschte Zeilen sind dabei rot, grüne wurden neu hinzugefügt.
|
||||
|
||||
In beiden Ansichten finden sich die Branching-Optionen oben in der Mitte:
|
||||
|
||||
.BranchingOptions
|
||||
image::bilder/SmartGit/SmartGitBranchingOptions.png[]
|
||||
|
||||
Branches werden hier Feature genannt.
|
||||
|
||||
==== Mergen und Mergekonflikte
|
||||
|
||||
Um den Mergevorgang nachzustellen wurde folgendes Szenario erschaffen: Eine Datei wurde von zwei Rechnern gleichzeitig bearbeitet und hinterher zunächst von einem erfolgreich gepusht. Der zweite Rechner versucht nun seine Version ebenfalls zu pushen.
|
||||
|
||||
.Smartgit Mergekonflikt
|
||||
image::bilder/SmartGit/Smartgit Abgelehnt.png[]
|
||||
|
||||
Daraufhin erstellt Smartgit eine Auflistung der Mergekonflikte.
|
||||
|
||||
.Smartgit Merging Teil 1
|
||||
image::bilder/SmartGit/Smartgit Merge 1.png[]
|
||||
|
||||
Außerdem werden verschiedene Buttons angeboten um den Konflikt zügig zu lösen.
|
||||
|
||||
.Smartgit Merging Teil 2
|
||||
image::bilder/SmartGit/Smartgit Merge 2.png[]
|
||||
|
||||
Durch Klicken auf die Datei öffnet sich ein detailliertes Fenster um in dieser jeweils zeilenweise zu entscheiden welcher Teil übernommen werden soll.
|
||||
|
||||
.Smartgit Merging Teil 3
|
||||
image::bilder/SmartGit/Smartgit Merge 3.png[]
|
||||
|
||||
Die Entscheidung wird durch das Klicken auf die kleinen Pfeile getätigt.,
|
||||
|
||||
.Smartgit Merging Teil 4
|
||||
image::bilder/SmartGit/Smartgit Merge 4.png[]
|
||||
|
||||
Ist der Konflikt entschieden wird die ignorierte / herausgelöschte Seite rot dargestellt.
|
||||
|
||||
.Smartgit Merging Teil 5
|
||||
image::bilder/SmartGit/Smartgit Merge 5.png[]
|
||||
|
||||
Sind mehrere Konflikte vorhanden kann über diese beiden Pfeile zwischen diesen gewechselt werden.
|
||||
|
||||
.Smartgit Merging Teil 6
|
||||
image::bilder/SmartGit/Smartgit Merge 6.png[]
|
||||
|
||||
Ist die Konfliktentscheidung abgeschlossen muss die entsprechende Datei als resolved markiert werden.
|
||||
|
||||
.Smartgit Merging Teil 7
|
||||
image::bilder/SmartGit/Smartgit Merge 7.png[]
|
||||
|
||||
Der gelöste Mergekonflikt wird hinterher in der History durch die Vereinigung der jeweiligen Branches visualisiert.
|
||||
|
||||
.Smartgit Merging Teil 8
|
||||
image::bilder/SmartGit/Smartgit Merge 8.png[]
|
||||
|
||||
Entwickelt man ohne entsprechende Mergekonflikte werden Branches über Pull-Requests auf der Website vereinigt.
|
||||
|
||||
|
||||
== Git-Konsole
|
||||
|
||||
=== Anlegen eines Repositories
|
||||
Um ein neues Git-Repository mit der Git-Konsole anzulegen, befolgen Sie bitte diese Schritte:
|
||||
|
||||
==== Konsole starten
|
||||
|
||||
Starten Sie Ihre bevorzugte Git-Konsole. Dies könnte die Befehlszeile (Command Line) oder eine integrierte Konsole
|
||||
in Ihrer Entwicklungsumgebung sein, wie zum Beispiel Git Bash.
|
||||
|
||||
==== Navigation
|
||||
|
||||
Verwende den Befehl `cd` (Change Directory), um zum gewünschten Speicherort zu navigieren, an dem Sie das neue
|
||||
Repository erstellen möchten.
|
||||
|
||||
==== Initialisierung
|
||||
|
||||
Verwenden Sie den Befehl `git init`, um ein neues Git-Repository im aktuellen Verzeichnis zu initialisieren.
|
||||
Dieser Befehl legt ein neues leeres Repository an.
|
||||
|
||||
==== Verzeichnis prüfen
|
||||
|
||||
Bestätigen Sie, dass das neue Git-Repository erfolgreich initialisiert wurde, indem Sie den Befehl `ls -a` (List All)
|
||||
verwenden, um den Inhalt des aktuellen Verzeichnisses anzuzeigen.
|
||||
Sie sollten ein verstecktes `.git`-Verzeichnis sehen, das das Repository enthält.
|
||||
|
||||
=== Clonen eines Repositories
|
||||
Wenn Sie ein vorhandenes Git-Repository auf Ihrem lokalen System klonen möchten, können Sie dies mit der Git-Konsole tun. Hier sind die Schritte dazu:
|
||||
|
||||
==== Konsole starten
|
||||
Öffnen Sie die Git-Konsole Ihrer Wahl. Sie können die Befehlszeile (Command Line)
|
||||
verwenden oder eine integrierte Konsole in Ihrer Entwicklungsumgebung wie Git Bash oder das integrierte Terminal.
|
||||
|
||||
==== Navigation
|
||||
Verwenden Sie den Befehl `cd` (Change Directory), um zum Verzeichnis zu navigieren,
|
||||
in dem Sie das geklonte Repository speichern möchten.
|
||||
|
||||
==== Klonvorgang anstoßen
|
||||
Verwenden Sie den Befehl `git clone` gefolgt von der URL des Repositorys, das Sie klonen möchten. Zum Beispiel:
|
||||
[source,shell]
|
||||
----
|
||||
git clone https://fortbildner.gitcamp-bw.de/ts-zsl-rska/GIT-Fortbildung.git
|
||||
----
|
||||
|
||||
Hier werden Sie nach Ihren Login-Daten gefragt, welche Sie eingeben müssen, um Zugang zu den Dateien zu erlangen.
|
||||
|
||||
==== Erfolg prüfen
|
||||
Sobald der Klonvorgang abgeschlossen ist, können Sie mit `ls` den Inhalt des aktuellen Verzeichnisses überprüfen. Sie sollten das geklonte Repository als neues Verzeichnis sehen.
|
||||
|
||||
=== Stage / Commit
|
||||
Wenn Sie Änderungen an Ihrem Git-Projekt vorgenommen haben und diese für einen Commit vorbereiten möchten, können Sie dies einfach über die Git-Konsole tun. Hier sind die Schritte dazu:
|
||||
|
||||
==== Überprüfen der Änderungen
|
||||
Verwenden Sie den Befehl `git status`, um den aktuellen Status Ihres Repositorys zu überprüfen. Dadurch erhalten Sie eine Liste der geänderten, ungestageten Dateien.
|
||||
|
||||
==== Stagen der Änderungen
|
||||
Verwenden Sie den Befehl `git add`, um die gewünschten Änderungen zur Staging-Area hinzuzufügen. Sie können einzelne Dateien oder Verzeichnisse hinzufügen, indem Sie ihren Pfad angeben, oder alle Änderungen auf einmal mit einem Punkt (`.`) für alle Dateien im aktuellen Verzeichnis.
|
||||
|
||||
Beispiel für das Stagen einer einzelnen Datei:
|
||||
[source,shell]
|
||||
----
|
||||
git add Dateiname
|
||||
----
|
||||
|
||||
Beispiel für das Stagen aller Änderungen im aktuellen Verzeichnis:
|
||||
[source,shell]
|
||||
----
|
||||
git add .
|
||||
----
|
||||
|
||||
==== Überprüfen der gestagten Änderungen
|
||||
|
||||
Verwenden Sie erneut den Befehl `git status`, um sicherzustellen, dass die gewünschten Änderungen erfolgreich zur Staging-Area hinzugefügt wurden. Sie sollten eine Liste der gestagten Änderungen sehen.
|
||||
|
||||
==== Commiten der Änderungen
|
||||
|
||||
Verwenden Sie den Befehl `git commit`, um die gestagten Änderungen zu committen. Geben Sie eine aussagekräftige Commit-Nachricht ein, um die durchgeführten Änderungen zu beschreiben.
|
||||
|
||||
[source,shell]
|
||||
----
|
||||
git commit -m "Hier ist Ihre Commit-Nachricht"
|
||||
----
|
||||
|
||||
==== Überprüfen des Commit-Erfolgs
|
||||
|
||||
Nachdem Sie die Änderungen committet haben, können Sie mit `git log` den Commit-Verlauf anzeigen und sicherstellen, dass Ihr Commit erfolgreich war.
|
||||
|
||||
|
||||
=== Check out
|
||||
|
||||
Wenn Sie an einem bestimmten Branch oder einem früheren Commit in Ihrem Git-Repository arbeiten möchten, können Sie dies über die Git-Konsole tun. Hier sind die Schritte dazu:
|
||||
|
||||
==== Überprüfen des Repository-Status
|
||||
|
||||
Verwenden Sie den Befehl `git status`, um den aktuellen Status Ihres Repositorys zu überprüfen. Dadurch erhalten Sie Informationen darüber, ob Sie Änderungen haben, die committet oder gestaged werden müssen.
|
||||
|
||||
==== Aus-checken des Gewünschten Branchs oder Commits
|
||||
|
||||
Verwenden Sie den Befehl `git checkout`, um zum gewünschten Branch oder Commit zu wechseln. Geben Sie den Namen des Branchs oder die Commit-ID an, zu der Sie wechseln möchten.
|
||||
|
||||
Beispiel für das Auschecken eines Branchs:
|
||||
[source,shell]
|
||||
----
|
||||
git checkout Branch-Name
|
||||
----
|
||||
|
||||
Beispiel für das Auschecken eines früheren Commits:
|
||||
[source,shell]
|
||||
----
|
||||
git checkout Commit-ID
|
||||
----
|
||||
|
||||
==== Überprüfen des Wechsel-Erfolgs
|
||||
|
||||
Nachdem Sie zum gewünschten Branch oder Commit gewechselt haben, verwenden Sie `git status`, um sicherzustellen, dass der Wechsel erfolgreich war und Ihr Arbeitsverzeichnis auf dem neuen Stand ist.
|
||||
|
||||
=== Push
|
||||
enn Sie Ihre lokalen Änderungen an ein entferntes Git-Repository hochladen möchten, können Sie dies über die Git-Konsole tun. Hier sind die Schritte dazu:
|
||||
|
||||
==== Überprüfen des Repository-Status
|
||||
|
||||
Verwenden Sie den Befehl `git status`, um den aktuellen Status Ihres Repositorys zu überprüfen. Dadurch erhalten Sie Informationen darüber, ob Sie Änderungen haben, die committet oder gestaged werden müssen.
|
||||
|
||||
==== Pushen der Änderungen
|
||||
|
||||
Verwenden Sie den Befehl `git push`, um Ihre lokalen Änderungen auf das entfernte Repository hochzuladen. Geben Sie den Namen des entfernten Repositories und den Namen des Branchs an, auf den Sie pushen möchten.
|
||||
|
||||
Beispiel für das Pushen auf den Hauptbranch (üblicherweise "master" oder "main"):
|
||||
[source,shell]
|
||||
----
|
||||
git push origin master
|
||||
----
|
||||
|
||||
==== Authentifizierung (falls erforderlich)
|
||||
|
||||
Je nach Konfiguration des entfernten Repositories kann es sein, dass Sie sich authentifizieren müssen, um den Push-Vorgang abzuschließen. Geben Sie Ihre Anmeldeinformationen ein, wenn Sie dazu aufgefordert werden.
|
||||
|
||||
==== Überprüfen des Push-Erfolgs
|
||||
|
||||
Nachdem der Push-Vorgang abgeschlossen ist, können Sie die Repository-Website besuchen oder den Befehl `git log` verwenden, um sicherzustellen, dass Ihre Änderungen erfolgreich auf das entfernte Repository hochgeladen wurden.
|
||||
|
||||
|
||||
=== Pull
|
||||
|
||||
Wenn Sie die neuesten Änderungen aus einem entfernten Git-Repository auf Ihr lokales Repository herunterladen möchten, können Sie dies über die Git-Konsole tun. Hier sind die Schritte dazu:
|
||||
|
||||
==== Pullen der neuesten Änderungen
|
||||
|
||||
Verwenden Sie den Befehl `git pull`, um die neuesten Änderungen aus dem entfernten Repository herunterzuladen und mit Ihrem lokalen Repository zu fusionieren. Geben Sie den Namen des entfernten Repositories und den Namen des Branchs an, den Sie pullen möchten.
|
||||
|
||||
Beispiel für das Pullen aus dem Hauptbranch (üblicherweise "master" oder "main"):
|
||||
[source,shell]
|
||||
----
|
||||
git pull origin master
|
||||
----
|
||||
|
||||
==== Authentifizierung (falls erforderlich)
|
||||
|
||||
Je nach Konfiguration des entfernten Repositories kann es sein, dass Sie sich authentifizieren müssen, um den Pull-Vorgang abzuschließen. Geben Sie Ihre Anmeldeinformationen ein, wenn Sie dazu aufgefordert werden.
|
||||
|
||||
==== Überprüfen des Pull-Erfolgs
|
||||
|
||||
Nachdem der Pull-Vorgang abgeschlossen ist, verwenden Sie den Befehl `git log` oder andere Git-Befehle, um sicherzustellen, dass die neuesten Änderungen erfolgreich in Ihr lokales Repository gezogen wurden.
|
||||
|
||||
=== Merge / Rebase
|
||||
|
||||
Wenn Sie Änderungen aus einem anderen Branch in Ihren aktuellen Branch integrieren möchten, können Sie dies über die Git-Konsole tun. Hier sind die Schritte dazu:
|
||||
|
||||
==== Navigieren zum Ziel-Branch
|
||||
|
||||
Verwenden Sie den Befehl `git checkout`, um zum Branch zu wechseln, in den Sie die Änderungen integrieren möchten. Stellen Sie sicher, dass Sie in dem Branch sind, in den Sie die Änderungen mergen möchten.
|
||||
|
||||
Beispiel für das Wechseln zum Ziel-Branch:
|
||||
[source,shell]
|
||||
----
|
||||
git checkout Ziel-Branch-Name
|
||||
----
|
||||
|
||||
==== Mergen des Quell-Branchs
|
||||
|
||||
Verwenden Sie den Befehl `git merge`, um den Quell-Branch in den Ziel-Branch zu mergen. Geben Sie den Namen des Quell-Branchs an, den Sie mergen möchten.
|
||||
|
||||
Beispiel für das Mergen des Quell-Branchs:
|
||||
[source,shell]
|
||||
----
|
||||
git merge Quell-Branch-Name
|
||||
----
|
||||
|
||||
==== Bearbeiten von Merge-Konflikten (falls erforderlich)
|
||||
|
||||
Wenn es Merge-Konflikte gibt, die nicht automatisch gelöst werden können, müssen Sie diese manuell bearbeiten.
|
||||
Öffnen Sie die betroffenen Dateien in einem Texteditor, beheben Sie die Konflikte und führen
|
||||
Sie dann den Merge-Vorgang erneut aus.
|
||||
Dieser Schritt wird durch moderne Entwicklungsumgebungen stark vereinfacht.
|
||||
|
||||
=== Branches
|
||||
Branches dienen dazu einzelne Features bzw. Teilprojekte separat anzulegen ohne dabei die Integrität des Hauptprojektes
|
||||
zu gefährden. In einer kollaborativen Entwicklungssituation sind sie unabdingbar.
|
||||
|
||||
==== anlegen
|
||||
|
||||
Sollten Sie einen bisherigen branch um einen neuen erweitern wollen, so sind folgende Schritte zu beachten:
|
||||
|
||||
===== Überprüfen des Repository-Status
|
||||
|
||||
Verwenden Sie den Befehl `git status`, um den aktuellen Status Ihres Repositorys zu überprüfen. Dadurch erhalten Sie Informationen darüber, ob Sie ungespeicherte Änderungen haben, die vor dem Branchen committet oder gestaged werden müssen.
|
||||
|
||||
===== Anlegen des Neuen Branchs
|
||||
|
||||
Verwenden Sie den Befehl `git branch`, um einen neuen Branch anzulegen. Geben Sie den Namen des neuen Branchs an, den Sie erstellen möchten.
|
||||
|
||||
Beispiel für das Anlegen eines neuen Branchs:
|
||||
[source,shell]
|
||||
----
|
||||
git branch Neuer-Branch-Name
|
||||
----
|
||||
|
||||
===== Wechseln zum Neuen Branch
|
||||
|
||||
Verwenden Sie den Befehl `git checkout`, um zum neu erstellten Branch zu wechseln und dort zu arbeiten.
|
||||
|
||||
Beispiel für das Wechseln zum neuen Branch:
|
||||
[source,shell]
|
||||
----
|
||||
git checkout Neuer-Branch-Name
|
||||
----
|
||||
|
||||
===== Überprüfen des Branch-Erfolgs
|
||||
|
||||
Nachdem Sie den neuen Branch erstellt haben, verwenden Sie den Befehl `git branch` erneut oder andere Git-Befehle, um sicherzustellen, dass der neue Branch erfolgreich erstellt wurde und Sie sich in ihm befinden.
|
||||
|
||||
|
||||
==== mergen
|
||||
Wenn Sie die Änderungen aus einem anderen Branch in Ihren aktuellen Branch integrieren möchten, können Sie dies über die Git-Konsole tun. Hier sind die Schritte dazu:
|
||||
|
||||
===== Überprüfen des Repository-Status
|
||||
|
||||
Verwenden Sie den Befehl `git status`, um den aktuellen Status Ihres Repositorys zu überprüfen. Dadurch erhalten Sie Informationen darüber, ob Sie ungespeicherte Änderungen haben, die vor dem Mergen committet oder gestaged werden müssen.
|
||||
|
||||
===== Wechseln zum Ziel-Branch
|
||||
|
||||
Verwenden Sie den Befehl `git checkout`, um zum Branch zu wechseln, in den Sie die Änderungen mergen möchten. Stellen Sie sicher, dass Sie sich im Ziel-Branch befinden, in den Sie die Änderungen integrieren möchten.
|
||||
|
||||
Beispiel für das Wechseln zum Ziel-Branch:
|
||||
[source,shell]
|
||||
----
|
||||
git checkout Ziel-Branch-Name
|
||||
----
|
||||
|
||||
===== Mergen des Quell-Branchs
|
||||
|
||||
Verwenden Sie den Befehl `git merge`, um den Quell-Branch in den Ziel-Branch zu mergen. Geben Sie den Namen des Quell-Branchs an, den Sie mergen möchten.
|
||||
|
||||
Beispiel für das Mergen des Quell-Branchs:
|
||||
[source,shell]
|
||||
----
|
||||
git merge Quell-Branch-Name
|
||||
----
|
||||
|
||||
===== Bearbeiten von Merge-Konflikten (falls erforderlich)
|
||||
|
||||
Wenn es Merge-Konflikte gibt, die nicht automatisch gelöst werden können, müssen Sie diese manuell bearbeiten.
|
||||
Öffnen Sie die betroffenen Dateien in einem Texteditor oder Entwicklungsumgebung, beheben Sie die Konflikte und führen Sie dann den Merge-Vorgang erneut aus.
|
||||
|
||||
===== Überprüfen des Merge-Erfolgs
|
||||
|
||||
Nachdem der Merge-Vorgang abgeschlossen ist, verwenden Sie den Befehl `git status` oder andere Git-Befehle, um sicherzustellen, dass der Merge erfolgreich war und keine Konflikte mehr vorhanden sind.
|
||||
114
GitOnline.adoc
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
= Umgang mit Git (Online)
|
||||
:author: Patrick Gerth <patrick.gerth@zsl-rss.de>
|
||||
include::kapitel-settings.adoc[]
|
||||
|
||||
|
||||
|
||||
== Anlegen von Repositories
|
||||
Das Anlegen eines neuen Repositories gestaltet sich auf der Weboberfläche von Gitcamp denkbar einfach.
|
||||
Dazu gilt es folgende Schritte zu befolgen:
|
||||
|
||||
=== Navigation zur Anlegemaske
|
||||
Um ein Repository anzulegen drücken Sie zunächst auf das Plus am oberen, rechten Bildschirmrand.
|
||||
|
||||
.Position des Plus-Buttons
|
||||
image::bilder/BilderGitOnline/Erstellen 1.png[]
|
||||
|
||||
Im Anschluss öffnet sich das Kontextmenü und man erhält die Wahl zum Anlegen eines neuen Repositories.
|
||||
|
||||
.Auswahl der "Neues Repository"-Option
|
||||
image::bilder/BilderGitOnline/Erstellen 1b.png[]
|
||||
|
||||
=== Ausfüllen der Anlegemaske
|
||||
|
||||
Innerhalb der nun geöffneten Maske lassen sich verschiedene Optionen für das neue Repository auswählen.
|
||||
|
||||
* verpflichtend ist hier der Name
|
||||
* auch die beiden beiden Einstellungen für die Sichtbarkeit können nicht übergangen werden. Es empfiehlt sich für Testprojekte immer private Repositories zu verwenden, während die Vorlagen für andere öffentlich sein sollten.
|
||||
* Eine Beschreibung (gerne in Ascii-Doc) hilft bei der Übersichtlichkeit
|
||||
* als Lizenz empfiehlt sich die MIT-Lizenz
|
||||
* Bei Bedarf bieten auch die anderen Einstellungsmöglichkeiten hervorragende Anpassungen
|
||||
|
||||
Durch Klicken auf den Button "Repository erstellen" wird das entsprechende Repository beim Nutzer angelegt.
|
||||
|
||||
=== Befüllen mit Daten
|
||||
|
||||
Im Nachgang zum Anlegen des Repsotories wird einem eine Kurzanleitung direkt eingeblendet. Diese gibt einem sogar die direkten Befehle vor um Lokal ein entsprechendes Repository anzulegen.
|
||||
|
||||
.Maske nach dem Erstellen
|
||||
image::bilder/BilderGitOnline/Erstellen 1c.png[]
|
||||
|
||||
Selbstverständlich sind die entsprechenden Werte auf Ihr persönliches Repository anzupassen.
|
||||
|
||||
Sind Ihre initialen Daten erstmal hinterlegt können Sie umgehend mit der Arbeit beginnen. Auf ihrer Startseite finden Sie ab jetzt am rechten Rand eine Auflistung Ihrer Repositories.
|
||||
|
||||
== Einstellungen bei Repositories
|
||||
Befinden Sie sich auf der Seite Ihres Repositories finden sie oben rechts den Einstellungsbutton:
|
||||
|
||||
.Auswahl der Einstellungs-Option
|
||||
image::bilder/BilderGitOnline/Einstellungen finden.png[]
|
||||
|
||||
Hier gelangen Sie zunächst auf eine Seite, auf welcher Sie sämtliche Einstellungen anpassen können, welche Sie bei der Erstellung getroffen haben.
|
||||
Außerdem finden sich hier auch komplexere Einstellungsmöglichkeiten, was das Signaturvertrauensmodell angeht (sofern Sie ein solches in Ihren Projekten verwenden möchten) und die besonderen Verwaltungseinstellungen des Administrators eines Projekts.
|
||||
|
||||
.Admineinstellungen
|
||||
image::bilder/BilderGitOnline/Admineinstellungen.png[]
|
||||
|
||||
Die beistehenden Texte sind hier selbsterklärend.
|
||||
|
||||
=== Zugriffsrechte / Repositories freigeben
|
||||
Wie im vorherigen Abschnitt zu sehen ist lässt sich ein Repository direkt an andere Benutzer übertragen. Allerdings ist dies natürlich nicht immer sinnvoll. Statt dessen benötigt ein entsprechendes Projekt oft Mitarbeiter oder, sollte es sich um ein privates Repository handeln, Betrachter.
|
||||
|
||||
.Mitarbeiterbereich in den Einstellungen
|
||||
image::bilder/BilderGitOnline/Einstellungen - Mitarbeiter.png[]
|
||||
|
||||
Hier lassen sich Mitarbeiter hinzufügen, entfernen und individuell einstellen, ob sie
|
||||
|
||||
* Nur leserechte haben
|
||||
** also nur die vorhandenen Dateien einsehen können und ggf. selbst von diesen einen Fork erstellen können
|
||||
* Schreibrechte haben
|
||||
** um damit auch Veränderungen an den Dateien vornehmen können
|
||||
* oder Administratorrechte haben
|
||||
** und damit das komplette Projekt samt Mitarbeiterliste etc. verändern können. Hier wird entschieden davon abgeraten leichtfertig dieses Recht zu vergeben.
|
||||
|
||||
.Mitarbeitereinstellungen
|
||||
image::bilder/BilderGitOnline/MitarbeiterBeispiel.png[]
|
||||
|
||||
=== Issues zulassen
|
||||
Um Rückmeldungen, Fehlermeldungen, Funktionswünsche etc. an Projekte zu richten oder um entsprechende Dinge selbst am Projekt zu verfolgen eignet sich die Erstellung sog. Issues.
|
||||
Diese werden im entsprechenden Projekt unter "Issues" verwaltet.
|
||||
|
||||
.Issues-Tab
|
||||
image::bilder/BilderGitOnline/Issues.png[]
|
||||
|
||||
Hier können Kommentare angehängt werden, welche den aktuellen Status beschreiben oder diskutieren. Durch Schließen des Issues seitens der Administration gilt dieses als abgearbeitet oder abgelehnt. Stellt sich im Nachhinein heraus, dass dem nicht so ist, so kann das Issue wieder eröffnet werden.
|
||||
Bei Öffnen des Issues lassen sich außerdem Zuständige, Meilensteine, Fälligkeitsdaten etc. anhängen. Außerdem kann man die Kommentarsektion sperren, das Issue oben in der Issueliste anheften oder das ganze Issue löschen.
|
||||
|
||||
== Forken eines Repositories
|
||||
Betrachtet man ein fremdes Repository, oder eines, in welchem zumindest Inhalte vorhanden sind, so lässt sich davon ein sog. Fork erstellen. Dabei handelt es sich um Kopien des entsprechenden Repositories zum Zeitpunkt des Forkens, welche beim forkenden Benutzer verortet sind. Zu finden ist der Knopf zum Forken auf der Seite des entsprechenden Repositories:
|
||||
|
||||
.Fork-Button
|
||||
image::bilder/BilderGitOnline/Fork1.png[]
|
||||
|
||||
Durch Drücken dieses Knopfes öffnet sich ein weiteres Dialogfenster, welches verschiedene Optionen anbietet.
|
||||
|
||||
.Fork-Dialog
|
||||
image::bilder/BilderGitOnline/Fork2.png[]
|
||||
|
||||
Durch Anlegen des Forks öffnet sich die entsprechende Seite des neuen Repositories. Damit sind Sie fortan Besitzer einer entsprechenden Kopie des Originalrepositories. Updates dessen werden nicht zu Ihnen weitergespielt und Ihre Änderungen werden nicht an das Originalrepository weitergegeben.
|
||||
|
||||
== Herunterladen von Repositories / einzelnen Branches
|
||||
Möchten Sie Ihr Repository von Ihrer lokalen Maschine aus herunterladen, so hängen die nächsten Schritte massiv von Ihrer benutzten Entwicklungs- / Git-Umgebung ab. Zentral festzuhalten gilt, dass Sie den Zugriffsschlüssel auf der Projektseite direkt über der Dateiliste am rechten Rand abfragen können:
|
||||
|
||||
.Access-Link
|
||||
image::bilder/BilderGitOnline/Access1.png[]
|
||||
|
||||
Die Wahl zwischen HTTPS oder SSH sollte für die meisten Benutzer auf HTTPS fallen, wenn sie sich nicht über einen entsprechenden SSH-Schlüssel authentifizieren wollen. Das Erstellen und Verwenden von SSH-Schlüsseln würde den Rahmen dieser Dokumentation allerdings sprengen.
|
||||
|
||||
== Löschen von Repositories
|
||||
Möchten Sie ein Repository löschen geschieht dies auf der "Einstellungen"-Seite des Repositories ganz unten. Dies ist endgültig! Folgen Sie hier den Anweisungen des Dialogfensters.
|
||||
|
||||
.Löschen-Dialog
|
||||
image::bilder/BilderGitOnline/Loeschen.png[]
|
||||
|
||||
Im Anschluss finden Sie oben in der Mitte des neuen Fensters die Meldung "Das Repository wurde gelöscht." wenn der Vorgang erfolgreich war.
|
||||
29
Glossar.adoc
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
= Glossar (Kopie aus Urs Dokument)
|
||||
:author: Patrick Gerth <patrick.gerth@zsl-rss.de>
|
||||
|
||||
. Arbeitsverzeichnis +
|
||||
Ordner, der mit Hilfe eines Git-Repository verwaltet werden soll.
|
||||
|
||||
. repository +
|
||||
Git-eigene Datenbank, die entweder direkt im .git-Unterordner des Arbeitsverzeichnisses liegt (lokales Repo), oder auch auf einem anderen Rechner.
|
||||
. staging area (manchmal auch "Index") +
|
||||
Vorbereitungsschritt, der geänderte Dateien für den nächsten Commit sammelt.
|
||||
. commit +
|
||||
Ein Versionsstand des Projekts, der mit Datum, Kommentar und weiteren Angaben
|
||||
festgehalten wurde; als Verb committen: einen Commit vornehmen.
|
||||
. clean +
|
||||
Das Arbeitsverzeichnis ist clean, wenn es mit dem letzten Commit exakt übereinstimmt.
|
||||
. checkout +
|
||||
bringt das Arbeitsverzeichnis auf den Stand eines bestimmten Commit (oder Branch). Es sollte dafür vor dem Checkout clean sein.
|
||||
. merge +
|
||||
auseinander gelaufene Versionen zusammenführen; das können Differenzen zwischen zwei lokalen Branches sein, aber auch Änderungen im gleichen Branch zwischen zwei Teammitgliedern.
|
||||
. push +
|
||||
neue Commits vom lokalen Repo ins Server-Repo schieben.
|
||||
. fetch +
|
||||
neue Commits vom Server ins lokale Repo holen.
|
||||
. pull +
|
||||
fetch und dann merge.
|
||||
. Konflikt +
|
||||
tritt auf, wenn zwei "auseinandergelaufene" Versionen Änderungen in gleichen Zeilen enthalten, und muss von Hand aufgelöst werden.
|
||||
. branch +
|
||||
Absichtlich eingerichtete Verzweigung der Versionsgeschichte.
|
||||
170
LICENSE
Normal file
|
|
@ -0,0 +1,170 @@
|
|||
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
|
||||
|
||||
Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.
|
||||
|
||||
Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.
|
||||
|
||||
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
|
||||
|
||||
Section 1 – Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. BY-NC-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
|
||||
|
||||
e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
|
||||
|
||||
f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
|
||||
|
||||
g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution, NonCommercial, and ShareAlike.
|
||||
|
||||
h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
|
||||
|
||||
i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. Licensor means the individual(s) or entity(ies) granting rights under this Public License.
|
||||
|
||||
k. NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange.
|
||||
|
||||
l. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
|
||||
|
||||
m. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
|
||||
|
||||
n. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
|
||||
|
||||
Section 2 – Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
A. reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and
|
||||
|
||||
B. produce, reproduce, and Share Adapted Material for NonCommercial purposes only.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section 6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
|
||||
|
||||
B. Additional offer from the Licensor – Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply.
|
||||
|
||||
C. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes.
|
||||
|
||||
Section 3 – License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified form), You must:
|
||||
|
||||
A. retain the following if it is supplied by the Licensor with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
|
||||
|
||||
B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
|
||||
|
||||
C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
|
||||
|
||||
b. ShareAlike.In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-NC-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply.
|
||||
|
||||
Section 4 – Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only;
|
||||
|
||||
b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
|
||||
For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
|
||||
|
||||
Section 5 – Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
|
||||
|
||||
b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
|
||||
|
||||
Section 6 – Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
|
||||
|
||||
Section 7 – Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
|
||||
|
||||
Section 8 – Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
|
||||
|
||||
Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
1
Material/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
*.drawio.bkp
|
||||
76
Material/DrawIO/GitCheckout1.drawio
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
<mxfile host="app.diagrams.net" modified="2023-11-07T16:44:23.711Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" etag="QY-wyGj5T4yPpE7PV5MB" version="22.0.8" type="device">
|
||||
<diagram name="Seite-1" id="Af-TfluFq1LnW7Be_UMk">
|
||||
<mxGraphModel dx="1434" dy="758" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-42" value="" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="30" width="350" height="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-13" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="50" y="220" width="450" height="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-36" value="" style="endArrow=block;html=1;rounded=0;strokeColor=#FF8000;strokeWidth=3;endSize=1;endFill=1;fillColor=#fff2cc;" parent="1" source="mvllpbwzCjBD3HYJ6CMy-43" target="mvllpbwzCjBD3HYJ6CMy-45" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="300" y="250" as="sourcePoint" />
|
||||
<mxPoint x="220" y="250" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-43" value="#1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFCC99;strokeColor=#d79b00;" parent="1" vertex="1">
|
||||
<mxGeometry x="120" y="100" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-44" value="Remote" style="text;html=1;strokeColor=none;fillColor=default;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="160" y="50" width="50" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-45" value="#1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#99CCFF;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="120" y="260" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-46" value="master" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="60" y="255" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-47" value="Lokaler Computer" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000066;labelBackgroundColor=default;" parent="1" vertex="1">
|
||||
<mxGeometry x="46" y="220" width="110" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-50" value="" style="endArrow=block;html=1;rounded=0;strokeWidth=3;endSize=1;endFill=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="mvllpbwzCjBD3HYJ6CMy-45" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="140" y="280" as="sourcePoint" />
|
||||
<mxPoint x="170" y="270" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-52" value="#2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#99CCFF;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="170" y="260" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-53" value="#3" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#99CCFF;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="220" y="260" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-54" value="#4" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#99CCFF;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="270" y="260" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-55" value="" style="endArrow=block;html=1;rounded=0;strokeColor=#6c8ebf;strokeWidth=3;endSize=1;endFill=1;fillColor=#dae8fc;" parent="1" source="mvllpbwzCjBD3HYJ6CMy-52" target="mvllpbwzCjBD3HYJ6CMy-53" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="140" y="280" as="sourcePoint" />
|
||||
<mxPoint x="190" y="230" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-56" value="" style="endArrow=block;html=1;rounded=0;strokeColor=#6c8ebf;strokeWidth=3;endSize=1;endFill=1;fillColor=#dae8fc;" parent="1" source="mvllpbwzCjBD3HYJ6CMy-53" target="mvllpbwzCjBD3HYJ6CMy-54" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="140" y="280" as="sourcePoint" />
|
||||
<mxPoint x="190" y="230" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-59" value="checkout" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#CC0000;" parent="1" vertex="1">
|
||||
<mxGeometry x="200" y="290" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-60" value="" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="174" y="290" width="10" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-64" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="250" y="294.72" as="sourcePoint" />
|
||||
<mxPoint x="210" y="294.72" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
49
Material/DrawIO/GitCheckout2.drawio
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
<mxfile host="app.diagrams.net" modified="2023-11-07T16:45:07.090Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" etag="PVfB7qmvK4hV4jp-ozVu" version="22.0.8" type="device">
|
||||
<diagram name="Seite-1" id="Af-TfluFq1LnW7Be_UMk">
|
||||
<mxGraphModel dx="1434" dy="758" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-42" value="" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="30" width="350" height="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-13" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="50" y="220" width="450" height="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-36" value="" style="endArrow=block;html=1;rounded=0;strokeColor=#FF8000;strokeWidth=3;endSize=1;endFill=1;fillColor=#fff2cc;" parent="1" source="mvllpbwzCjBD3HYJ6CMy-43" target="mvllpbwzCjBD3HYJ6CMy-45" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="300" y="250" as="sourcePoint" />
|
||||
<mxPoint x="220" y="250" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-43" value="#1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFCC99;strokeColor=#d79b00;" parent="1" vertex="1">
|
||||
<mxGeometry x="120" y="100" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-44" value="Remote" style="text;html=1;strokeColor=none;fillColor=default;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="160" y="50" width="50" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-45" value="#1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#99CCFF;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="120" y="260" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-46" value="master" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="60" y="255" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-47" value="Lokaler Computer" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000066;labelBackgroundColor=default;" parent="1" vertex="1">
|
||||
<mxGeometry x="46" y="220" width="110" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-50" value="" style="endArrow=block;html=1;rounded=0;strokeWidth=3;endSize=1;endFill=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="mvllpbwzCjBD3HYJ6CMy-45" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="140" y="280" as="sourcePoint" />
|
||||
<mxPoint x="170" y="270" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-52" value="#2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#99CCFF;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="170" y="260" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-59" value="commit (add)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#CC0000;" parent="1" vertex="1">
|
||||
<mxGeometry x="150" y="285" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
43
Material/DrawIO/GitClone.drawio
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
<mxfile host="app.diagrams.net" modified="2023-11-07T16:50:49.109Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" etag="sRs2jaQOHAyXP3vhjYGh" version="22.0.8" type="device">
|
||||
<diagram name="Seite-1" id="Af-TfluFq1LnW7Be_UMk">
|
||||
<mxGraphModel dx="1434" dy="758" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-42" value="" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="30" width="350" height="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-13" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="50" y="220" width="450" height="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-36" value="" style="endArrow=block;html=1;rounded=0;strokeColor=#FF8000;strokeWidth=3;endSize=1;endFill=1;fillColor=#fff2cc;" parent="1" source="mvllpbwzCjBD3HYJ6CMy-43" target="mvllpbwzCjBD3HYJ6CMy-45" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="300" y="250" as="sourcePoint" />
|
||||
<mxPoint x="220" y="250" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-43" value="#1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFCC99;strokeColor=#d79b00;" parent="1" vertex="1">
|
||||
<mxGeometry x="120" y="100" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-44" value="Remote" style="text;html=1;strokeColor=none;fillColor=default;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="160" y="50" width="50" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-45" value="#1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#99CCFF;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="120" y="260" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-46" value="master" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="60" y="255" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-47" value="Lokaler Computer" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000066;labelBackgroundColor=default;" parent="1" vertex="1">
|
||||
<mxGeometry x="46" y="220" width="110" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-59" value="clone" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#CC0000;rotation=90;" parent="1" vertex="1">
|
||||
<mxGeometry x="110" y="177" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="pew9mvKhV2sG11pf7ast-1" value="" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="125" y="290" width="10" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
40
Material/DrawIO/GitCommit1.drawio
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<mxfile host="app.diagrams.net" modified="2023-11-07T16:47:57.264Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" etag="UMA43Q5BeFMACQt1lkzc" version="22.0.8" type="device">
|
||||
<diagram name="Seite-1" id="Af-TfluFq1LnW7Be_UMk">
|
||||
<mxGraphModel dx="1434" dy="758" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-42" value="" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="30" width="350" height="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-13" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="50" y="220" width="450" height="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-36" value="" style="endArrow=block;html=1;rounded=0;strokeColor=#FF8000;strokeWidth=3;endSize=1;endFill=1;fillColor=#fff2cc;" parent="1" source="mvllpbwzCjBD3HYJ6CMy-43" target="mvllpbwzCjBD3HYJ6CMy-45" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="300" y="250" as="sourcePoint" />
|
||||
<mxPoint x="220" y="250" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-43" value="#1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFCC99;strokeColor=#d79b00;" parent="1" vertex="1">
|
||||
<mxGeometry x="120" y="100" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-44" value="Remote" style="text;html=1;strokeColor=none;fillColor=default;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="160" y="50" width="50" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-45" value="#1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#99CCFF;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="120" y="260" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-46" value="master" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="60" y="255" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-47" value="Lokaler Computer" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000066;labelBackgroundColor=default;" parent="1" vertex="1">
|
||||
<mxGeometry x="46" y="220" width="110" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-59" value="clone" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#CC0000;rotation=90;" parent="1" vertex="1">
|
||||
<mxGeometry x="120" y="180" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
67
Material/DrawIO/GitCommit2.drawio
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
<mxfile host="app.diagrams.net" modified="2023-11-07T16:46:31.678Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" etag="PLYkwGCnuPjQM942Kou4" version="22.0.8" type="device">
|
||||
<diagram name="Seite-1" id="Af-TfluFq1LnW7Be_UMk">
|
||||
<mxGraphModel dx="1434" dy="758" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-42" value="" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="30" width="350" height="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-13" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="50" y="220" width="450" height="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-36" value="" style="endArrow=block;html=1;rounded=0;strokeColor=#FF8000;strokeWidth=3;endSize=1;endFill=1;fillColor=#fff2cc;" parent="1" source="mvllpbwzCjBD3HYJ6CMy-43" target="mvllpbwzCjBD3HYJ6CMy-45" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="300" y="250" as="sourcePoint" />
|
||||
<mxPoint x="220" y="250" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-43" value="#1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFCC99;strokeColor=#d79b00;" parent="1" vertex="1">
|
||||
<mxGeometry x="120" y="100" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-44" value="Remote" style="text;html=1;strokeColor=none;fillColor=default;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="160" y="50" width="50" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-45" value="#1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#99CCFF;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="120" y="260" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-46" value="master" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="60" y="255" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-47" value="Lokaler Computer" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000066;labelBackgroundColor=default;" parent="1" vertex="1">
|
||||
<mxGeometry x="46" y="220" width="110" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-50" value="" style="endArrow=block;html=1;rounded=0;strokeWidth=3;endSize=1;endFill=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="mvllpbwzCjBD3HYJ6CMy-45" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="140" y="280" as="sourcePoint" />
|
||||
<mxPoint x="170" y="270" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-52" value="#2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#99CCFF;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="170" y="260" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-59" value="commit (add)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#CC0000;" parent="1" vertex="1">
|
||||
<mxGeometry x="250" y="285" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="SICg1RleHynyizmmTq5C-4" value="" style="endArrow=block;html=1;rounded=0;strokeWidth=3;endSize=1;endFill=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="190" y="270" as="sourcePoint" />
|
||||
<mxPoint x="220" y="270" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="SICg1RleHynyizmmTq5C-5" value="#3" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#99CCFF;strokeColor=#6c8ebf;" vertex="1" parent="1">
|
||||
<mxGeometry x="220" y="260" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="SICg1RleHynyizmmTq5C-6" value="" style="endArrow=block;html=1;rounded=0;strokeWidth=3;endSize=1;endFill=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="240" y="270" as="sourcePoint" />
|
||||
<mxPoint x="270" y="270" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="SICg1RleHynyizmmTq5C-7" value="#4" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#99CCFF;strokeColor=#6c8ebf;" vertex="1" parent="1">
|
||||
<mxGeometry x="270" y="260" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
49
Material/DrawIO/GitCommit3.drawio
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
<mxfile host="app.diagrams.net" modified="2023-11-07T16:47:16.234Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" etag="lYSiOA4vD4JwFRIhgKgT" version="22.0.8" type="device">
|
||||
<diagram name="Seite-1" id="Af-TfluFq1LnW7Be_UMk">
|
||||
<mxGraphModel dx="1434" dy="758" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-42" value="" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
|
||||
<mxGeometry x="40" y="30" width="350" height="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-13" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="50" y="220" width="450" height="140" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-36" value="" style="endArrow=block;html=1;rounded=0;strokeColor=#FF8000;strokeWidth=3;endSize=1;endFill=1;fillColor=#fff2cc;" parent="1" source="mvllpbwzCjBD3HYJ6CMy-43" target="mvllpbwzCjBD3HYJ6CMy-45" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="300" y="250" as="sourcePoint" />
|
||||
<mxPoint x="220" y="250" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-43" value="#1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFCC99;strokeColor=#d79b00;" parent="1" vertex="1">
|
||||
<mxGeometry x="120" y="100" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-44" value="Remote" style="text;html=1;strokeColor=none;fillColor=default;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="160" y="50" width="50" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-45" value="#1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#99CCFF;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="120" y="260" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-46" value="master" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="60" y="255" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-47" value="Lokaler Computer" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000066;labelBackgroundColor=default;" parent="1" vertex="1">
|
||||
<mxGeometry x="46" y="220" width="110" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-50" value="" style="endArrow=block;html=1;rounded=0;strokeWidth=3;endSize=1;endFill=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" source="mvllpbwzCjBD3HYJ6CMy-45" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="140" y="280" as="sourcePoint" />
|
||||
<mxPoint x="170" y="270" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-52" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
|
||||
<mxGeometry x="170" y="260" width="20" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="mvllpbwzCjBD3HYJ6CMy-59" value="lokale Ändernungen" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#CC0000;" parent="1" vertex="1">
|
||||
<mxGeometry x="150" y="285" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
284
Material/Fortbildungsverlauf1.drawio
Normal file
|
|
@ -0,0 +1,284 @@
|
|||
<mxfile host="Electron" modified="2024-05-06T11:50:11.614Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.1.0 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="J9kvgPWkddZWqZmFd7NO" version="24.1.0" type="device">
|
||||
<diagram name="Page-1" id="c7558073-3199-34d8-9f00-42111426c3f3">
|
||||
<mxGraphModel dx="1098" dy="718" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="826" pageHeight="1169" background="none" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--105" value=" SuS versionieren online (SuS arbeiten zu Hause und in der Schule)" style="rounded=1;arcSize=2;fillColor=#fff2cc;strokeColor=#d6b656;align=right;verticalAlign=bottom;spacingRight=6;" parent="1" vertex="1">
|
||||
<mxGeometry x="10" y="630" width="800" height="520" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--95" value="Lehrperson stellt nur Material per GIT bereit, SuS versionieren lokal" style="rounded=1;arcSize=2;fillColor=#fff2cc;strokeColor=#d6b656;align=right;verticalAlign=top;spacingRight=6;" parent="1" vertex="1">
|
||||
<mxGeometry x="10" y="100" width="800" height="520" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="2" value="Version 1
2 Würfel
(Wireframe)" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="35" y="139" width="95" height="41" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="3" value="Teilnehmer 1
(Schüler)" style="align=center;verticalAlign=middle;fontStyle=1;strokeWidth=3;fillColor=#FFFFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="470" y="30" width="90" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="4" value="Fortbildner
(Lehrer)" style="align=center;verticalAlign=middle;fontStyle=1;strokeWidth=3;fillColor=#FFFFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="110" y="30" width="90" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="10" value="lokale Änderung
Name anpassen" style="verticalAlign=top;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;labelPosition=center;verticalLabelPosition=middle;" parent="1" vertex="1">
|
||||
<mxGeometry x="380" y="139" width="110" height="43" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="37" value="" style="edgeStyle=none;noEdgeStyle=1;strokeColor=#990000;strokeWidth=2;" parent="1" source="4" target="2" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="280" y="190" as="sourcePoint" />
|
||||
<mxPoint x="380" y="90" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="55" value="clone" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-117" target="10" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="130" y="240" as="sourcePoint" />
|
||||
<mxPoint x="140" y="250" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="58" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;" parent="1" source="fMPjmrxZrLU6knjUS5LS-102" target="10" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="599" y="391" as="sourcePoint" />
|
||||
<mxPoint x="639" y="270" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="539" y="320" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93" value="stage / commit" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="10" target="fMPjmrxZrLU6knjUS5LS-98" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="279" y="280" as="sourcePoint" />
|
||||
<mxPoint x="219" y="400" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-103" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;" parent="1" source="fMPjmrxZrLU6knjUS5LS-98" target="fMPjmrxZrLU6knjUS5LS-100" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-98" value="lokale Änderung
Kreis
hinzufügen" style="verticalAlign=top;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;spacingTop=7;spacing=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="380" y="217" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-99" value="stage / commit" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-98" target="fMPjmrxZrLU6knjUS5LS-100" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="435" y="309" as="sourcePoint" />
|
||||
<mxPoint x="219" y="506" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-100" value="lokale Änderung
Fünfeck
hinzufügen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="380" y="297" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-101" value="stage / commit" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-100" target="fMPjmrxZrLU6knjUS5LS-102" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="435" y="411" as="sourcePoint" />
|
||||
<mxPoint x="219" y="608" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-102" value="lokale Änderung
Würfel 
verdrehen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="380" y="379" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-104" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;" parent="1" source="fMPjmrxZrLU6knjUS5LS-102" target="fMPjmrxZrLU6knjUS5LS-98" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="540" y="520" as="sourcePoint" />
|
||||
<mxPoint x="540" y="210" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="539" y="370" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-106" value="checkout" style="edgeLabel;align=center;verticalAlign=middle;resizable=0;points=[];horizontal=0;" parent="fMPjmrxZrLU6knjUS5LS-104" vertex="1" connectable="0">
|
||||
<mxGeometry x="0.2222" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-105" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;" parent="1" source="fMPjmrxZrLU6knjUS5LS-102" target="fMPjmrxZrLU6knjUS5LS-100" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="510" y="501" as="sourcePoint" />
|
||||
<mxPoint x="510" y="191" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="539" y="430" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-107" value="Version 2
ausgefüllte
Flächen
" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="35" y="400" width="95" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-108" value="" style="edgeStyle=none;noEdgeStyle=1;strokeColor=#990000;strokeWidth=2;" parent="1" source="2" target="fMPjmrxZrLU6knjUS5LS-107" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="80" y="320" as="sourcePoint" />
|
||||
<mxPoint x="81" y="369" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-109" value="" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="380" y="560" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-110" value="fetch" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-120" target="9XMS0WJ-w8kAbf0jl1N--93" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="140" y="170" as="sourcePoint" />
|
||||
<mxPoint x="231" y="171" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-112" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-102" target="fMPjmrxZrLU6knjUS5LS-109" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="445" y="351" as="sourcePoint" />
|
||||
<mxPoint x="445" y="389" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-113" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" target="fMPjmrxZrLU6knjUS5LS-114" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="435" y="604" as="sourcePoint" />
|
||||
<mxPoint x="219" y="871" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-114" value="lokale Änderung
Aufteilung in
3 Dateien" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="380" y="642" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-115" value="stage / commit" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" target="fMPjmrxZrLU6knjUS5LS-116" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="435" y="686" as="sourcePoint" />
|
||||
<mxPoint x="219" y="953" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-116" value="Remote
hinzufügen /
tracking branch" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="380" y="724" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-118" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;" parent="1" source="2" target="fMPjmrxZrLU6knjUS5LS-117" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="130" y="160" as="sourcePoint" />
|
||||
<mxPoint x="380" y="161" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-119" value="bereit-
stellen" style="edgeLabel;align=center;verticalAlign=middle;resizable=0;points=[];" parent="fMPjmrxZrLU6knjUS5LS-118" vertex="1" connectable="0">
|
||||
<mxGeometry x="-0.2308" y="2" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-117" value="Version 1
" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#ffe6cc;strokeColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="190" y="139" width="95" height="41" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-121" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;" parent="1" source="fMPjmrxZrLU6knjUS5LS-107" target="fMPjmrxZrLU6knjUS5LS-120" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="130" y="422" as="sourcePoint" />
|
||||
<mxPoint x="380" y="422" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-122" value="push" style="edgeLabel;align=center;verticalAlign=middle;resizable=0;points=[];" parent="fMPjmrxZrLU6knjUS5LS-121" vertex="1" connectable="0">
|
||||
<mxGeometry x="-0.2308" y="2" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-120" value="Version 2
" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#ffe6cc;strokeColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="190" y="401.5" width="95" height="41" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-123" value="übernommene 
Änderungen 
prüfen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" parent="1" vertex="1">
|
||||
<mxGeometry x="560" y="724" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-124" value="push" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-116" target="fMPjmrxZrLU6knjUS5LS-123" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="295" y="592" as="sourcePoint" />
|
||||
<mxPoint x="390" y="592" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-126" value="anderer Rechner:
lokale Änderung
herumspringen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#99FFFF;" parent="1" vertex="1">
|
||||
<mxGeometry x="400" y="880" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-128" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="9XMS0WJ-w8kAbf0jl1N--100" target="fMPjmrxZrLU6knjUS5LS-126" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="445" y="532" as="sourcePoint" />
|
||||
<mxPoint x="615" y="940" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--103" value="clone" style="edgeLabel;align=center;verticalAlign=middle;resizable=0;points=[];" parent="fMPjmrxZrLU6knjUS5LS-128" vertex="1" connectable="0">
|
||||
<mxGeometry x="0.2283" y="-3" relative="1" as="geometry">
|
||||
<mxPoint x="34" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-130" value="stage / commit" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" target="fMPjmrxZrLU6knjUS5LS-131" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="455" y="924" as="sourcePoint" />
|
||||
<mxPoint x="239" y="1191" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-131" value="" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#99FFFF;" parent="1" vertex="1">
|
||||
<mxGeometry x="400" y="962" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-132" value="Online 
Änderungen
 prüfen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" parent="1" vertex="1">
|
||||
<mxGeometry x="560" y="962" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-133" value="push" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-131" target="fMPjmrxZrLU6knjUS5LS-132" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="500" y="929" as="sourcePoint" />
|
||||
<mxPoint x="570" y="1060" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-135" value="" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="380" y="1040" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-137" value="pull" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-132" target="fMPjmrxZrLU6knjUS5LS-135" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="560" y="1062" as="sourcePoint" />
|
||||
<mxPoint x="390" y="908" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--93" value="anderer Rechner:
lokale Änderung" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#99FFFF;" parent="1" vertex="1">
|
||||
<mxGeometry x="303" y="480" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--94" value="rebase" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="9XMS0WJ-w8kAbf0jl1N--93" target="fMPjmrxZrLU6knjUS5LS-109" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="290" y="570" as="sourcePoint" />
|
||||
<mxPoint x="290" y="707" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--96" value="Repository online
anlegen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" parent="1" vertex="1">
|
||||
<mxGeometry x="560" y="642" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--97" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="9XMS0WJ-w8kAbf0jl1N--96" target="fMPjmrxZrLU6knjUS5LS-123" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="625" y="778" as="sourcePoint" />
|
||||
<mxPoint x="625" y="799" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--98" value="stage / commit" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-116" target="9XMS0WJ-w8kAbf0jl1N--99" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="435" y="768" as="sourcePoint" />
|
||||
<mxPoint x="219" y="1035" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--99" value="Lokale Änderung
Farbe festlegen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="380" y="806" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--100" value="übernommene 
Änderungen 
prüfen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" parent="1" vertex="1">
|
||||
<mxGeometry x="560" y="806" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--101" value="push" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="9XMS0WJ-w8kAbf0jl1N--99" target="9XMS0WJ-w8kAbf0jl1N--100" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="295" y="674" as="sourcePoint" />
|
||||
<mxPoint x="390" y="674" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--102" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" target="9XMS0WJ-w8kAbf0jl1N--100" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="615" y="768" as="sourcePoint" />
|
||||
<mxPoint x="625" y="881" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
248
Material/Fortbildungsverlauf1a.drawio
Normal file
|
|
@ -0,0 +1,248 @@
|
|||
<mxfile host="Electron" modified="2024-05-14T08:21:25.192Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.1.0 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="QjqHlod5KAYGOeqn6N6i" version="24.1.0" type="device">
|
||||
<diagram name="Page-1" id="c7558073-3199-34d8-9f00-42111426c3f3">
|
||||
<mxGraphModel dx="1098" dy="718" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="826" pageHeight="1169" background="none" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="T7GhT-MWuxg6zO9ZYnXp-94" value="" style="rounded=1;arcSize=2;fillColor=#fff2cc;strokeColor=#d6b656;align=right;verticalAlign=top;spacingRight=6;" vertex="1" parent="1">
|
||||
<mxGeometry x="370" y="100" width="290" height="590" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--95" value="" style="rounded=1;arcSize=2;fillColor=#fff2cc;strokeColor=#d6b656;align=right;verticalAlign=top;spacingRight=6;" parent="1" vertex="1">
|
||||
<mxGeometry x="10" y="100" width="290" height="590" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="2" value="Version 1
2 Würfel
(Wireframe)" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="35" y="139" width="95" height="41" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="3" value="Teilnehmer 1
(Schüler)" style="align=center;verticalAlign=middle;fontStyle=1;strokeWidth=3;fillColor=#FFFFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="470" y="30" width="90" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="4" value="Fortbildner
(Lehrer)" style="align=center;verticalAlign=middle;fontStyle=1;strokeWidth=3;fillColor=#FFFFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="110" y="30" width="90" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="10" value="lokale Änderung
Name anpassen" style="verticalAlign=top;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;labelPosition=center;verticalLabelPosition=middle;" parent="1" vertex="1">
|
||||
<mxGeometry x="385.5" y="139" width="110" height="43" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="37" value="" style="edgeStyle=none;noEdgeStyle=1;strokeColor=#990000;strokeWidth=2;" parent="1" source="4" target="2" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="280" y="190" as="sourcePoint" />
|
||||
<mxPoint x="380" y="90" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="55" value="clone" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-117" target="10" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="130" y="240" as="sourcePoint" />
|
||||
<mxPoint x="140" y="250" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="58" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;" parent="1" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="495.5" y="400" as="sourcePoint" />
|
||||
<mxPoint x="495.5" y="159.5" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="524.5" y="319" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="93" value="stage / commit" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="10" target="fMPjmrxZrLU6knjUS5LS-98" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="204.5" y="280" as="sourcePoint" />
|
||||
<mxPoint x="144.5" y="400" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-103" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;" parent="1" source="fMPjmrxZrLU6knjUS5LS-98" target="fMPjmrxZrLU6knjUS5LS-100" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-98" value="lokale Änderung
Kreis
hinzufügen" style="verticalAlign=top;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;spacingTop=7;spacing=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="385.5" y="217" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-99" value="stage / commit" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-98" target="fMPjmrxZrLU6knjUS5LS-100" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="360.5" y="309" as="sourcePoint" />
|
||||
<mxPoint x="144.5" y="506" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-100" value="lokale Änderung
Fünfeck
hinzufügen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="385.5" y="297" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-101" value="stage / commit" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-100" target="fMPjmrxZrLU6knjUS5LS-102" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="360.5" y="411" as="sourcePoint" />
|
||||
<mxPoint x="144.5" y="608" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-102" value="lokale Änderung
Würfel 
verdrehen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="385.5" y="379" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-104" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;" parent="1" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="495.5" y="400" as="sourcePoint" />
|
||||
<mxPoint x="495.5" y="238" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="524.5" y="369" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-106" value="checkout" style="edgeLabel;align=center;verticalAlign=middle;resizable=0;points=[];horizontal=0;" parent="fMPjmrxZrLU6knjUS5LS-104" vertex="1" connectable="0">
|
||||
<mxGeometry x="0.2222" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-105" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;" parent="1" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="495.5" y="400" as="sourcePoint" />
|
||||
<mxPoint x="495.5" y="318" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="524.5" y="429" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-107" value="Version 2
ausgefüllte
Flächen
" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="35" y="400" width="95" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-108" value="" style="edgeStyle=none;noEdgeStyle=1;strokeColor=#990000;strokeWidth=2;" parent="1" source="2" target="fMPjmrxZrLU6knjUS5LS-107" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="80" y="320" as="sourcePoint" />
|
||||
<mxPoint x="81" y="369" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-109" value="Einordnung
kontrollieren" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="385.5" y="520" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-110" value="fetch" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-120" target="9XMS0WJ-w8kAbf0jl1N--93" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="140" y="170" as="sourcePoint" />
|
||||
<mxPoint x="231" y="171" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="240" y="490" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-112" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-102" target="fMPjmrxZrLU6knjUS5LS-109" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="370.5" y="351" as="sourcePoint" />
|
||||
<mxPoint x="370.5" y="389" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-118" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;" parent="1" source="2" target="fMPjmrxZrLU6knjUS5LS-117" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="130" y="160" as="sourcePoint" />
|
||||
<mxPoint x="380" y="161" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-119" value="bereit-
stellen" style="edgeLabel;align=center;verticalAlign=middle;resizable=0;points=[];" parent="fMPjmrxZrLU6knjUS5LS-118" vertex="1" connectable="0">
|
||||
<mxGeometry x="-0.2308" y="2" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-117" value="Version 1
" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#ffe6cc;strokeColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="190" y="139" width="95" height="41" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-121" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;" parent="1" source="fMPjmrxZrLU6knjUS5LS-107" target="fMPjmrxZrLU6knjUS5LS-120" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="130" y="422" as="sourcePoint" />
|
||||
<mxPoint x="380" y="422" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-122" value="push" style="edgeLabel;align=center;verticalAlign=middle;resizable=0;points=[];" parent="fMPjmrxZrLU6knjUS5LS-121" vertex="1" connectable="0">
|
||||
<mxGeometry x="-0.2308" y="2" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-120" value="Version 2
" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#ffe6cc;strokeColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="190" y="401.5" width="95" height="41" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--93" value="Informationen 
über 
Arbeitsstand" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#99FFFF;" parent="1" vertex="1">
|
||||
<mxGeometry x="540" y="470" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--94" value="rebase" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="9XMS0WJ-w8kAbf0jl1N--93" target="fMPjmrxZrLU6knjUS5LS-109" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="290" y="570" as="sourcePoint" />
|
||||
<mxPoint x="290" y="707" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="510" y="542" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="T7GhT-MWuxg6zO9ZYnXp-93" value="Neues Remote-
verzeichnis
 anlegen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#99FFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="401.5" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="T7GhT-MWuxg6zO9ZYnXp-95" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" edge="1" parent="1" source="T7GhT-MWuxg6zO9ZYnXp-93" target="9XMS0WJ-w8kAbf0jl1N--93">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="451" y="433" as="sourcePoint" />
|
||||
<mxPoint x="451" y="570" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="T7GhT-MWuxg6zO9ZYnXp-99" value="Version 3
Lösung" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" vertex="1" parent="1">
|
||||
<mxGeometry x="35" y="510" width="95" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="T7GhT-MWuxg6zO9ZYnXp-100" value="" style="edgeStyle=none;noEdgeStyle=1;strokeColor=#990000;strokeWidth=2;" edge="1" parent="1" target="T7GhT-MWuxg6zO9ZYnXp-99" source="fMPjmrxZrLU6knjUS5LS-107">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="83" y="420" as="sourcePoint" />
|
||||
<mxPoint x="81" y="479" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="T7GhT-MWuxg6zO9ZYnXp-101" value="eigene Version 
mit Musterlösung
vergleichen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" vertex="1" parent="1">
|
||||
<mxGeometry x="385.5" y="630" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="T7GhT-MWuxg6zO9ZYnXp-102" value="fetch" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" edge="1" parent="1" source="T7GhT-MWuxg6zO9ZYnXp-104" target="T7GhT-MWuxg6zO9ZYnXp-105">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="140" y="280" as="sourcePoint" />
|
||||
<mxPoint x="231" y="281" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="240" y="600" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="T7GhT-MWuxg6zO9ZYnXp-103" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" edge="1" parent="1" target="T7GhT-MWuxg6zO9ZYnXp-101" source="fMPjmrxZrLU6knjUS5LS-109">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="441" y="533" as="sourcePoint" />
|
||||
<mxPoint x="370.5" y="499" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="T7GhT-MWuxg6zO9ZYnXp-104" value="Version 3" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#ffe6cc;strokeColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="190" y="511.5" width="95" height="41" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="T7GhT-MWuxg6zO9ZYnXp-105" value="Informationen 
über 
Arbeitsstand" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#99FFFF;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="580" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="T7GhT-MWuxg6zO9ZYnXp-106" value="merge" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="T7GhT-MWuxg6zO9ZYnXp-105" target="T7GhT-MWuxg6zO9ZYnXp-101">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="290" y="680" as="sourcePoint" />
|
||||
<mxPoint x="290" y="817" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="510" y="652" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="T7GhT-MWuxg6zO9ZYnXp-107" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" edge="1" parent="1" target="T7GhT-MWuxg6zO9ZYnXp-105" source="9XMS0WJ-w8kAbf0jl1N--93">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="595" y="556" as="sourcePoint" />
|
||||
<mxPoint x="451" y="680" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="T7GhT-MWuxg6zO9ZYnXp-108" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;" edge="1" parent="1" source="T7GhT-MWuxg6zO9ZYnXp-99" target="T7GhT-MWuxg6zO9ZYnXp-104">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="140" y="432" as="sourcePoint" />
|
||||
<mxPoint x="200" y="432" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="T7GhT-MWuxg6zO9ZYnXp-109" value="push" style="edgeLabel;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="T7GhT-MWuxg6zO9ZYnXp-108">
|
||||
<mxGeometry x="-0.2308" y="2" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
204
Material/Fortbildungsverlauf1b.drawio
Normal file
|
|
@ -0,0 +1,204 @@
|
|||
<mxfile host="Electron" modified="2024-06-04T08:19:12.899Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.1.0 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="EeVWCF5sa3v64pV6swjm" version="24.1.0" type="device">
|
||||
<diagram name="Page-1" id="c7558073-3199-34d8-9f00-42111426c3f3">
|
||||
<mxGraphModel dx="1098" dy="718" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="826" pageHeight="1169" background="none" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="o-y9mFQTUgu0cXv-z9J6-98" value="" style="rounded=1;arcSize=2;fillColor=#ffe6cc;strokeColor=#d79b00;align=right;verticalAlign=bottom;spacingRight=6;" parent="1" vertex="1">
|
||||
<mxGeometry x="214.5" y="110" width="150" height="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o-y9mFQTUgu0cXv-z9J6-96" value="" style="rounded=1;arcSize=2;fillColor=#dae8fc;strokeColor=#6c8ebf;align=right;verticalAlign=bottom;spacingRight=6;" parent="1" vertex="1">
|
||||
<mxGeometry x="394.5" y="110" width="140" height="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--105" value="" style="rounded=1;arcSize=2;fillColor=#fff2cc;strokeColor=#d6b656;align=right;verticalAlign=bottom;spacingRight=6;" parent="1" vertex="1">
|
||||
<mxGeometry x="34.5" y="110" width="150" height="740" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="3" value="Rechner 1" style="align=center;verticalAlign=middle;fontStyle=1;strokeWidth=3;fillColor=#FFFFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="64.5" y="30" width="90" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-113" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="109" y="90" as="sourcePoint" />
|
||||
<mxPoint x="109" y="139" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="109" y="120" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-114" value="lokale Änderung
Aufteilung in
3 Dateien" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="54.5" y="300" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-116" value="Lokale Änderung
Farbe festlegen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="54.5" y="418" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-123" value="übernommene 
Änderungen 
prüfen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" parent="1" vertex="1">
|
||||
<mxGeometry x="234.5" y="541" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-126" value="lokale Änderung
Effekt Gummiball" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#99FFFF;" parent="1" vertex="1">
|
||||
<mxGeometry x="409.5" y="620" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-128" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-123" target="fMPjmrxZrLU6knjUS5LS-126" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="289.5" y="508" as="sourcePoint" />
|
||||
<mxPoint x="289.5" y="437" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--103" value="clone" style="edgeLabel;align=center;verticalAlign=middle;resizable=0;points=[];fontColor=#990000;fontStyle=1" parent="fMPjmrxZrLU6knjUS5LS-128" vertex="1" connectable="0">
|
||||
<mxGeometry x="0.2283" y="-3" relative="1" as="geometry">
|
||||
<mxPoint x="-14" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-131" value="" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#99FFFF;" parent="1" vertex="1">
|
||||
<mxGeometry x="409.5" y="800" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-132" value="übernommene
Änderungen
 prüfen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" parent="1" vertex="1">
|
||||
<mxGeometry x="234.5" y="710" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-133" value="push" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-126" target="fMPjmrxZrLU6knjUS5LS-132" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="460" y="650" as="sourcePoint" />
|
||||
<mxPoint x="244.5" y="557" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-135" value="" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="54.5" y="541" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-137" value="pull" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-132" target="AjgMKVtQPG59PqS_b6qE-19" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="234.5" y="559" as="sourcePoint" />
|
||||
<mxPoint x="64.5" y="405" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--96" value="Repository online
anlegen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" parent="1" vertex="1">
|
||||
<mxGeometry x="234.5" y="139" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--97" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="AjgMKVtQPG59PqS_b6qE-13" target="fMPjmrxZrLU6knjUS5LS-123" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="299.5" y="275" as="sourcePoint" />
|
||||
<mxPoint x="299.5" y="296" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="o-y9mFQTUgu0cXv-z9J6-94" value="push" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-116" target="fMPjmrxZrLU6knjUS5LS-123" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="175" y="335" as="sourcePoint" />
|
||||
<mxPoint x="245" y="335" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="o-y9mFQTUgu0cXv-z9J6-95" value="Rechner 2" style="align=center;verticalAlign=middle;fontStyle=1;strokeWidth=3;fillColor=#99CCFF;" parent="1" vertex="1">
|
||||
<mxGeometry x="419.5" y="30" width="90" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="o-y9mFQTUgu0cXv-z9J6-97" value="Online-
Repository" style="align=center;verticalAlign=middle;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" parent="1" vertex="1">
|
||||
<mxGeometry x="244.5" y="30" width="90" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="AjgMKVtQPG59PqS_b6qE-3" value="Remote-
Verzeichnis
hinzufügen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" vertex="1" parent="1">
|
||||
<mxGeometry x="54.5" y="139" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="AjgMKVtQPG59PqS_b6qE-4" value="fetch" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="9XMS0WJ-w8kAbf0jl1N--96" target="AjgMKVtQPG59PqS_b6qE-5">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="234.5" y="161" as="sourcePoint" />
|
||||
<mxPoint x="164.5" y="161" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="180" y="200" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="AjgMKVtQPG59PqS_b6qE-5" value="Tracking branch
setzen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" vertex="1" parent="1">
|
||||
<mxGeometry x="54.5" y="220" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="AjgMKVtQPG59PqS_b6qE-6" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" edge="1" parent="1" source="AjgMKVtQPG59PqS_b6qE-3" target="AjgMKVtQPG59PqS_b6qE-5">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="122" y="394" as="sourcePoint" />
|
||||
<mxPoint x="122" y="432" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="AjgMKVtQPG59PqS_b6qE-7" value="Dateien auf
Server prüfen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" vertex="1" parent="1">
|
||||
<mxGeometry x="234.5" y="220" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="AjgMKVtQPG59PqS_b6qE-8" value="push to" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" edge="1" parent="1" source="AjgMKVtQPG59PqS_b6qE-5" target="AjgMKVtQPG59PqS_b6qE-7">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="167" y="300" as="sourcePoint" />
|
||||
<mxPoint x="237" y="300" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="AjgMKVtQPG59PqS_b6qE-9" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" edge="1" parent="1" source="9XMS0WJ-w8kAbf0jl1N--96" target="AjgMKVtQPG59PqS_b6qE-7">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="302" y="476" as="sourcePoint" />
|
||||
<mxPoint x="302" y="514" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="AjgMKVtQPG59PqS_b6qE-12" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" edge="1" parent="1" source="AjgMKVtQPG59PqS_b6qE-5" target="fMPjmrxZrLU6knjUS5LS-114">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="312" y="486" as="sourcePoint" />
|
||||
<mxPoint x="312" y="524" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="110" y="290" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="AjgMKVtQPG59PqS_b6qE-14" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" edge="1" parent="1" source="AjgMKVtQPG59PqS_b6qE-7" target="AjgMKVtQPG59PqS_b6qE-13">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="290" y="264" as="sourcePoint" />
|
||||
<mxPoint x="290" y="382" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="AjgMKVtQPG59PqS_b6qE-15" value="push" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="fMPjmrxZrLU6knjUS5LS-114" target="AjgMKVtQPG59PqS_b6qE-13">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="175" y="414" as="sourcePoint" />
|
||||
<mxPoint x="245" y="414" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="AjgMKVtQPG59PqS_b6qE-13" value="übernommene 
Änderungen 
prüfen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" vertex="1" parent="1">
|
||||
<mxGeometry x="234.5" y="418" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-115" value="stage / commit" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" target="fMPjmrxZrLU6knjUS5LS-116" edge="1" source="fMPjmrxZrLU6knjUS5LS-114">
|
||||
<mxGeometry x="-0.5676" width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="-30" y="230" as="sourcePoint" />
|
||||
<mxPoint x="-106.5" y="450" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="9XMS0WJ-w8kAbf0jl1N--98" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-116" target="fMPjmrxZrLU6knjUS5LS-135" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="109.5" y="265" as="sourcePoint" />
|
||||
<mxPoint x="110" y="464" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="AjgMKVtQPG59PqS_b6qE-18" value="<span style="color: rgb(153, 0, 0); font-weight: 700;">stage / commit</span>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="9XMS0WJ-w8kAbf0jl1N--98">
|
||||
<mxGeometry x="0.519" y="1" relative="1" as="geometry">
|
||||
<mxPoint x="-1" y="-42" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="AjgMKVtQPG59PqS_b6qE-19" value="übernommene
Änderungen
prüfen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" vertex="1" parent="1">
|
||||
<mxGeometry x="54.5" y="800" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-130" value="stage / commit" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" target="fMPjmrxZrLU6knjUS5LS-131" edge="1" source="fMPjmrxZrLU6knjUS5LS-126">
|
||||
<mxGeometry x="-0.7241" width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="710" y="421" as="sourcePoint" />
|
||||
<mxPoint x="248.5" y="688" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="AjgMKVtQPG59PqS_b6qE-20" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" edge="1" parent="1" source="fMPjmrxZrLU6knjUS5LS-135" target="AjgMKVtQPG59PqS_b6qE-19">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="120" y="472" as="sourcePoint" />
|
||||
<mxPoint x="120" y="551" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
201
Material/Fortbildungsverlauf2.drawio
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
<mxfile host="Electron" modified="2024-06-20T17:19:24.643Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.1.0 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="Q692-IuwLd4qzx9YnmHZ" version="24.1.0" type="device">
|
||||
<diagram name="Page-1" id="c7558073-3199-34d8-9f00-42111426c3f3">
|
||||
<mxGraphModel dx="1098" dy="718" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="826" pageHeight="1169" background="none" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="iD6G-pBimY5p4T0BN60D-55" value="" style="rounded=1;whiteSpace=wrap;html=1;arcSize=5;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="1">
|
||||
<mxGeometry x="20" y="120" width="320" height="670" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="iD6G-pBimY5p4T0BN60D-60" value="" style="rounded=1;whiteSpace=wrap;html=1;arcSize=5;fillColor=#EBDFBC;strokeColor=#d6b656;" vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="360" width="150" height="250" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="iD6G-pBimY5p4T0BN60D-56" value="" style="rounded=1;whiteSpace=wrap;html=1;arcSize=5;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
|
||||
<mxGeometry x="360" y="120" width="320" height="670" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="2" value="
" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="35" y="139" width="95" height="41" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="3" value="Teilnehmer 2
(Schüler)" style="align=center;verticalAlign=middle;fontStyle=1;strokeWidth=3;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
|
||||
<mxGeometry x="475" y="30" width="90" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="4" value="Teilnehmer 1
(Lehrer)" style="align=center;verticalAlign=middle;fontStyle=1;strokeWidth=3;fillColor=#FFFFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="135" y="30" width="90" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="55" value="fork" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-117" target="fMPjmrxZrLU6knjUS5LS-123" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="130" y="240" as="sourcePoint" />
|
||||
<mxPoint x="380" y="160.5" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-98" value="lokale Änderung
Fehler einbauen" style="verticalAlign=top;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;spacingTop=7;spacing=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="380" y="217" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-99" value="stage / commit" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="430" y="261" as="sourcePoint" />
|
||||
<mxPoint x="430" y="297" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-100" value="" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="380" y="297" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-108" value="" style="edgeStyle=none;noEdgeStyle=1;strokeColor=#990000;strokeWidth=2;" parent="1" source="2" target="fMPjmrxZrLU6knjUS5LS-147" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="80" y="320" as="sourcePoint" />
|
||||
<mxPoint x="82.5" y="217" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-112" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-147" target="fMPjmrxZrLU6knjUS5LS-126" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="185" y="612" as="sourcePoint" />
|
||||
<mxPoint x="185" y="650" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-117" value="Mitarbeiter 
hinzufügen
(nur Leserechte)" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#ffe6cc;strokeColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="220" y="139" width="95" height="41" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-123" value="Lehrer
Schreibrechte
einräumen
" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" parent="1" vertex="1">
|
||||
<mxGeometry x="550" y="136" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-126" value="neuer Remote 
für Schüler / TN2
Fetch / Checkout" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#D5E8D4;" parent="1" vertex="1">
|
||||
<mxGeometry x="80" y="380" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-130" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" target="fMPjmrxZrLU6knjUS5LS-131" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="135" y="424" as="sourcePoint" />
|
||||
<mxPoint x="-81" y="691" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-131" value="lökale Änderung
Fehler suchen 
Kommentieren" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#D5E8D4;" parent="1" vertex="1">
|
||||
<mxGeometry x="80" y="462" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-140" value="clone" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-123" target="fMPjmrxZrLU6knjUS5LS-98" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="560" y="239" as="sourcePoint" />
|
||||
<mxPoint x="500" y="882" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-141" value="" style="edgeStyle=none;noEdgeStyle=1;strokeColor=#990000;strokeWidth=2;" parent="1" source="4" target="2" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="80" y="100" as="sourcePoint" />
|
||||
<mxPoint x="80" y="170" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-142" value="" style="edgeStyle=none;noEdgeStyle=1;strokeColor=#990000;strokeWidth=2;" parent="1" source="4" target="fMPjmrxZrLU6knjUS5LS-117" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="143" y="100" as="sourcePoint" />
|
||||
<mxPoint x="107" y="149" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-147" value="" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="35" y="297" width="95" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-148" value="
" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" parent="1" vertex="1">
|
||||
<mxGeometry x="550" y="297" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-149" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-123" target="fMPjmrxZrLU6knjUS5LS-148" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="615" y="261" as="sourcePoint" />
|
||||
<mxPoint x="445" y="550" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-150" value="push" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-100" target="fMPjmrxZrLU6knjUS5LS-148" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="570" y="961" as="sourcePoint" />
|
||||
<mxPoint x="580" y="410" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-152" value="stage / commit" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-131" target="fMPjmrxZrLU6knjUS5LS-153" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="260" y="520" as="sourcePoint" />
|
||||
<mxPoint x="-81" y="770" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-153" value="" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#D5E8D4;" parent="1" vertex="1">
|
||||
<mxGeometry x="80" y="550" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-165" value="" style="edgeStyle=orthogonalEdgeStyle;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;curved=1;" parent="1" source="fMPjmrxZrLU6knjUS5LS-148" target="fMPjmrxZrLU6knjUS5LS-126" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="248" y="348" as="sourcePoint" />
|
||||
<mxPoint x="430" y="410" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="610" y="400" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-166" value="pull" style="edgeLabel;align=center;verticalAlign=middle;resizable=0;points=[];fontStyle=1;fontColor=#990000;" parent="fMPjmrxZrLU6knjUS5LS-165" vertex="1" connectable="0">
|
||||
<mxGeometry x="0.1582" relative="1" as="geometry">
|
||||
<mxPoint x="-112" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-170" value="Lehrerhinweise
lesen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" parent="1" vertex="1">
|
||||
<mxGeometry x="560" y="637" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-173" value="" style="edgeStyle=orthogonalEdgeStyle;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;curved=1;" parent="1" source="fMPjmrxZrLU6knjUS5LS-153" target="fMPjmrxZrLU6knjUS5LS-170" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="230" y="590" as="sourcePoint" />
|
||||
<mxPoint x="195" y="713" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="610" y="572" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-174" value="push" style="edgeLabel;align=center;verticalAlign=middle;resizable=0;points=[];fontStyle=1;fontColor=#990000;" parent="fMPjmrxZrLU6knjUS5LS-173" vertex="1" connectable="0">
|
||||
<mxGeometry x="0.1582" relative="1" as="geometry">
|
||||
<mxPoint x="-191" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-181" value="Lehrerhinweise
lesen
Fehler beheben" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="375" y="710" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-182" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="431" y="341" as="sourcePoint" />
|
||||
<mxPoint x="431" y="710" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-183" value="pull" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-170" target="fMPjmrxZrLU6knjUS5LS-181" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="530" y="661" as="sourcePoint" />
|
||||
<mxPoint x="299" y="1115" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="XX1150Ara4bidB_Uq-lR-63" value="
" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" parent="1" vertex="1">
|
||||
<mxGeometry x="560" y="710" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="XX1150Ara4bidB_Uq-lR-64" value="push" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-181" target="XX1150Ara4bidB_Uq-lR-63" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="485" y="732" as="sourcePoint" />
|
||||
<mxPoint x="575" y="823" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="iD6G-pBimY5p4T0BN60D-61" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" edge="1" parent="1" source="fMPjmrxZrLU6knjUS5LS-148" target="fMPjmrxZrLU6knjUS5LS-170">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="615" y="190" as="sourcePoint" />
|
||||
<mxPoint x="615" y="307" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="iD6G-pBimY5p4T0BN60D-62" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" edge="1" parent="1" source="fMPjmrxZrLU6knjUS5LS-170" target="XX1150Ara4bidB_Uq-lR-63">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="625" y="200" as="sourcePoint" />
|
||||
<mxPoint x="625" y="317" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
271
Material/Fortbildungsverlauf3.drawio
Normal file
|
|
@ -0,0 +1,271 @@
|
|||
<mxfile host="Electron" modified="2024-08-09T11:28:18.663Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.1.0 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="6wcJXAQgdJSn8H0tTw5A" version="24.1.0" type="device">
|
||||
<diagram name="Page-1" id="c7558073-3199-34d8-9f00-42111426c3f3">
|
||||
<mxGraphModel dx="1098" dy="718" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="826" pageHeight="1169" background="none" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="cYydLxkL3MFqd0uX2ky0-69" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;arcSize=5;" vertex="1" parent="1">
|
||||
<mxGeometry x="10" y="120" width="310" height="930" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cYydLxkL3MFqd0uX2ky0-72" value=" Variante B" style="rounded=1;verticalAlign=top;arcSize=7;align=center;fontStyle=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
|
||||
<mxGeometry x="22.5" y="675" width="277.5" height="365" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cYydLxkL3MFqd0uX2ky0-71" value=" Variante A" style="rounded=1;verticalAlign=top;arcSize=7;align=center;fontStyle=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
|
||||
<mxGeometry x="22.5" y="342.5" width="277.5" height="197.5" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cYydLxkL3MFqd0uX2ky0-70" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;arcSize=5;" vertex="1" parent="1">
|
||||
<mxGeometry x="350" y="120" width="320" height="930" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="2" value="
" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="35" y="139" width="95" height="41" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="3" value="Teilnehmer 2-4
Mitarbeiter" style="align=center;verticalAlign=middle;fontStyle=1;strokeWidth=3;fillColor=#FFFFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="465" y="30" width="90" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="4" value="Teilnehmer 1
Manager" style="align=center;verticalAlign=middle;fontStyle=1;strokeWidth=3;fillColor=#FFFFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="110" y="30" width="90" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="55" value="fork" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-117" target="fMPjmrxZrLU6knjUS5LS-123" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="130" y="240" as="sourcePoint" />
|
||||
<mxPoint x="380" y="160.5" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-103" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;" parent="1" source="fMPjmrxZrLU6knjUS5LS-98" target="fMPjmrxZrLU6knjUS5LS-100" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-98" value="unterschiedliche
Features 
A / B / C 
" style="verticalAlign=top;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;spacingTop=7;spacing=2;" parent="1" vertex="1">
|
||||
<mxGeometry x="370" y="218.5" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-99" value="stage / commit" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-98" target="fMPjmrxZrLU6knjUS5LS-100" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="425" y="310.5" as="sourcePoint" />
|
||||
<mxPoint x="209" y="507.5" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-100" value="" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="370" y="298.5" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-102" value="" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="35" y="984.5" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-108" value="" style="edgeStyle=none;noEdgeStyle=1;strokeColor=#990000;strokeWidth=2;" parent="1" source="2" target="XpJes0vn2xltySihN1Uk-58" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="80" y="320" as="sourcePoint" />
|
||||
<mxPoint x="82.5" y="217" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-112" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;exitX=0.75;exitY=1;exitDx=0;exitDy=0;" parent="1" source="XpJes0vn2xltySihN1Uk-58" target="fMPjmrxZrLU6knjUS5LS-126" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="105" y="702" as="sourcePoint" />
|
||||
<mxPoint x="185" y="752" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-113" value="checkout" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;entryX=0.164;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.189;exitY=0.951;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="XpJes0vn2xltySihN1Uk-58" target="fMPjmrxZrLU6knjUS5LS-102" edge="1">
|
||||
<mxGeometry x="0.8484" width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="53" y="692" as="sourcePoint" />
|
||||
<mxPoint x="80" y="722" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-115" value="push" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-102" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="175" y="1285.5" as="sourcePoint" />
|
||||
<mxPoint x="190" y="1006.5" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-117" value="lesenden 
Zugriff
für TN 2-4" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#ffe6cc;strokeColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="190" y="139" width="95" height="41" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-123" value="lesenden Zugriff 
für Manager
einräumen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" parent="1" vertex="1">
|
||||
<mxGeometry x="540" y="139" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-126" value="neuer Branch 
für Schüler / TN i
" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#D5E8D4;" parent="1" vertex="1">
|
||||
<mxGeometry x="80" y="817.5" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-130" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" target="fMPjmrxZrLU6knjUS5LS-131" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="135" y="861.5" as="sourcePoint" />
|
||||
<mxPoint x="-81" y="1128.5" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-131" value="Änderungen 
prüfen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#D5E8D4;" parent="1" vertex="1">
|
||||
<mxGeometry x="80" y="899.5" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-140" value="clone" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-123" target="fMPjmrxZrLU6knjUS5LS-98" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="540" y="240.5" as="sourcePoint" />
|
||||
<mxPoint x="480" y="883.5" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-141" value="" style="edgeStyle=none;noEdgeStyle=1;strokeColor=#990000;strokeWidth=2;" parent="1" source="4" target="2" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="80" y="100" as="sourcePoint" />
|
||||
<mxPoint x="80" y="170" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-142" value="" style="edgeStyle=none;noEdgeStyle=1;strokeColor=#990000;strokeWidth=2;" parent="1" source="4" target="fMPjmrxZrLU6knjUS5LS-117" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="143" y="100" as="sourcePoint" />
|
||||
<mxPoint x="107" y="149" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-143" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-117" target="fMPjmrxZrLU6knjUS5LS-184" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="625" y="192" as="sourcePoint" />
|
||||
<mxPoint x="238" y="297" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-148" value="
" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" parent="1" vertex="1">
|
||||
<mxGeometry x="540" y="298.5" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-149" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-123" target="fMPjmrxZrLU6knjUS5LS-148" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="595" y="262.5" as="sourcePoint" />
|
||||
<mxPoint x="425" y="551.5" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-150" value="push" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-100" target="fMPjmrxZrLU6knjUS5LS-148" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="550" y="962.5" as="sourcePoint" />
|
||||
<mxPoint x="560" y="411.5" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-152" value="merge" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-131" target="fMPjmrxZrLU6knjUS5LS-102" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="260" y="957.5" as="sourcePoint" />
|
||||
<mxPoint x="135" y="987.5" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-184" value="Merge online
(Merge commit)" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#ffe6cc;strokeColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="190" y="370" width="95" height="41" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-188" value="pull request" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;dashed=1;dashPattern=8 8;" parent="1" source="fMPjmrxZrLU6knjUS5LS-148" target="fMPjmrxZrLU6knjUS5LS-184" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="670" y="390" as="sourcePoint" />
|
||||
<mxPoint x="570" y="170" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="420" y="390" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-169" value="" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#ffe6cc;strokeColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="190" y="986" width="95" height="41" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fMPjmrxZrLU6knjUS5LS-198" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" target="fMPjmrxZrLU6knjUS5LS-169" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="238" y="663.5" as="sourcePoint" />
|
||||
<mxPoint x="248" y="632.5" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="XpJes0vn2xltySihN1Uk-58" value="Änderungen
ausprobieren" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" parent="1" vertex="1">
|
||||
<mxGeometry x="35" y="490" width="95" height="41" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="XpJes0vn2xltySihN1Uk-60" value="pull" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="fMPjmrxZrLU6knjUS5LS-184" target="XpJes0vn2xltySihN1Uk-58" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="190" y="450.5" as="sourcePoint" />
|
||||
<mxPoint x="430" y="1017" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="XpJes0vn2xltySihN1Uk-66" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;strokeColor=#990000;strokeWidth=2;" parent="1" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="425" y="598" as="sourcePoint" />
|
||||
<mxPoint x="425" y="624" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="XpJes0vn2xltySihN1Uk-69" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;" parent="1" source="cYydLxkL3MFqd0uX2ky0-61" target="cYydLxkL3MFqd0uX2ky0-64" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="595" y="598" as="sourcePoint" />
|
||||
<mxPoint x="595" y="624" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="XpJes0vn2xltySihN1Uk-70" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="fMPjmrxZrLU6knjUS5LS-184" target="XpJes0vn2xltySihN1Uk-71" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="238" y="471" as="sourcePoint" />
|
||||
<mxPoint x="238" y="667" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="XpJes0vn2xltySihN1Uk-71" value="" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#ffe6cc;strokeColor=#000000;" parent="1" vertex="1">
|
||||
<mxGeometry x="190" y="702.5" width="95" height="41" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="XpJes0vn2xltySihN1Uk-72" value="pull request" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;dashed=1;dashPattern=8 8;exitX=0.355;exitY=0.989;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="cYydLxkL3MFqd0uX2ky0-64" target="XpJes0vn2xltySihN1Uk-71" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="615" y="666.5" as="sourcePoint" />
|
||||
<mxPoint x="570" y="502.5" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="420" y="722.5" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="XpJes0vn2xltySihN1Uk-73" value="pull" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=0;fontColor=#990000;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="cYydLxkL3MFqd0uX2ky0-64" target="fMPjmrxZrLU6knjUS5LS-126" edge="1">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="200" y="461" as="sourcePoint" />
|
||||
<mxPoint x="140" y="521" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="380" y="800" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="cYydLxkL3MFqd0uX2ky0-55" value="fork" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" edge="1" parent="1" source="fMPjmrxZrLU6knjUS5LS-184" target="cYydLxkL3MFqd0uX2ky0-61">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="237.5" y="471" as="sourcePoint" />
|
||||
<mxPoint x="380" y="530.5" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="cYydLxkL3MFqd0uX2ky0-56" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;" edge="1" parent="1" source="cYydLxkL3MFqd0uX2ky0-57" target="cYydLxkL3MFqd0uX2ky0-59">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cYydLxkL3MFqd0uX2ky0-57" value="unterschiedliche
Features 
D / E / F 
" style="verticalAlign=top;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;spacingTop=7;spacing=2;" vertex="1" parent="1">
|
||||
<mxGeometry x="370" y="551" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cYydLxkL3MFqd0uX2ky0-58" value="stage / commit" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" edge="1" parent="1" source="cYydLxkL3MFqd0uX2ky0-57" target="cYydLxkL3MFqd0uX2ky0-59">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="425" y="643" as="sourcePoint" />
|
||||
<mxPoint x="209" y="840" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="cYydLxkL3MFqd0uX2ky0-59" value="" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#E6FFCC;" vertex="1" parent="1">
|
||||
<mxGeometry x="370" y="631" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cYydLxkL3MFqd0uX2ky0-61" value="lesenden Zugriff 
für Manager
einräumen" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="471.5" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cYydLxkL3MFqd0uX2ky0-62" value="clone" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" edge="1" parent="1" source="cYydLxkL3MFqd0uX2ky0-61" target="cYydLxkL3MFqd0uX2ky0-57">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="540" y="573" as="sourcePoint" />
|
||||
<mxPoint x="480" y="1216" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="cYydLxkL3MFqd0uX2ky0-64" value="
" style="verticalAlign=middle;align=center;overflow=fill;fontSize=12;fontFamily=Helvetica;rounded=1;fontStyle=1;strokeWidth=3;fillColor=#FFCE9F;" vertex="1" parent="1">
|
||||
<mxGeometry x="540" y="631" width="110" height="44" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cYydLxkL3MFqd0uX2ky0-66" value="push" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeColor=#990000;strokeWidth=2;fontStyle=1;fontColor=#990000;" edge="1" parent="1" source="cYydLxkL3MFqd0uX2ky0-59" target="cYydLxkL3MFqd0uX2ky0-64">
|
||||
<mxGeometry width="100" height="100" relative="1" as="geometry">
|
||||
<mxPoint x="550" y="1295" as="sourcePoint" />
|
||||
<mxPoint x="560" y="744" as="targetPoint" />
|
||||
<Array as="points" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
BIN
Material/GIT_CloneCommitPush.odp
Normal file
BIN
Material/Informationssammlung.docx
Normal file
11638
Material/Urs_git-im-unterricht.pdf
Normal file
BIN
Material/git-cheat-sheet-education.pdf
Normal file
7
PDF-settings-A4-de.adoc
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
:encoding: utf-8
|
||||
:lang: de
|
||||
:xrefstyle: full
|
||||
:chapter-signifier: Kapitel
|
||||
:chapter-label: Kapitel
|
||||
:section-signifier: Abschnitt
|
||||
:pdf-page-margin: [20mm, 20mm, 20mm, 20mm]
|
||||
|
After Width: | Height: | Size: 124 KiB |
49
Präsentation/Praesentation.adoc
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
= Git an Schulen
|
||||
:author: Patrick Gerth <patrick.gerth@zsl-rss.de>
|
||||
:revealjs_theme: black
|
||||
:revealjs_transition: slide
|
||||
|
||||
== Was genau ist Git?
|
||||
* Git ist eine Versionsverwaltung
|
||||
** Erfassung von Änderungen an Dokumenten oder Dateien
|
||||
** Protokollierung von Änderungen
|
||||
** Management von Varianten
|
||||
|
||||
=== Hauptaufgaben
|
||||
|
||||
[%step]
|
||||
* Protokollierung
|
||||
* Koordinierung
|
||||
* Archivierung
|
||||
* Wiederherstellung
|
||||
* Gleichzeitige Entwicklung
|
||||
|
||||
Deswegen sind diese Systeme unverzichtbar in einer modernen Entwicklungsumgebung.
|
||||
|
||||
[.columns]
|
||||
=== Wer hat's erfunden?
|
||||
[.column]
|
||||
--
|
||||
* Linus Torvalds
|
||||
* Schöpfer von Linux
|
||||
* 2005 unzufrieden mit den damaligen Versionierungstools
|
||||
* Erschuf deswegen Git
|
||||
--
|
||||
|
||||
[.column]
|
||||
--
|
||||
.Krd (photo)Von Sprat (crop/extraction), CC BY-SA 3.0 <https://creativecommons.org/licenses/by-sa/3.0>, via Wikimedia Commons
|
||||
image::BilderFuerPraesentation/LinuxCon_Europe_Linus_Torvalds_03_(cropped).jpg[]
|
||||
--
|
||||
|
||||
== Idee
|
||||
|
||||
* Man erfasst einen bestimmten Zustandes des Projektes
|
||||
* Kommentiert diesen mit den Änderungen seit der letzten Zustandserfassung
|
||||
* Lädt diesen Zustand dann auf das gemeinsame Verzeichnis
|
||||
|
||||
== Wichtigste Begriffe
|
||||
* Repository / Repo
|
||||
* Commit
|
||||
* Push
|
||||
* Pull / Update
|
||||
1
Präsentation/readme.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
Die hier erstellten Ascii-Docs sind dazu bestimmt via Asciidoctor in reveal js Slides konvertiert zu werden.
|
||||
33
README.md
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# Versionierung von Softwareprojekten (GIT)
|
||||
|
||||
Im Zuge der Digitalisierung des Informatikunterrichts in Baden-Württemberg wird angestrebt, den Schülerinnen und Schülern die Grundkonzepte einer Versionsverwaltung nahezubringen und im alltäglichen Unterricht gewinnbringend einzusetzen. Das Land Baden-Württemberg bietet dazu den Schulen einen Git-Service unter dem Namen [Gitcamp Baden-Württemberg](https://fortbildner.gitcamp-bw.de/) an.
|
||||
|
||||
Dieses Projekt vermittelt die Grundlagen des Arbeiten mit GIT in der Schule, der Administration von GitCamp und stellt unterschiedliche Szenarien vor, wie GIT im Gymnasium in den Klassenstufe 9 bis 13 (IMP und Informatik-Kursstufe) eingesetzt werden kann.
|
||||
|
||||
|
||||
## Material
|
||||
|
||||
### Bearbeitung
|
||||
Die vorliegenden Unterrichtsmaterialien wurden im [Ascii-Doc Format (.adoc)](https://asciidoc.org/) erstellt. Sie können sie mit einem einfachen Texteditor editieren. Für größere Änderungen empfiehlt sich die Verwendung von [Visual Studio Code](https://code.visualstudio.com/) mit der Extension Asciidoc oder von [AsciidocFX](https://github.com/asciidocfx/AsciidocFX). Beide Programme zeigen die formatierte Ausgabe fortlaufend während der Bearbeitung des Codes an. Möglicherweise machen dabei die mathematischen Formeln oder die Diagramme probleme, die Erweiterungen der normalen Asciidoc Syntax darstellen. Beim Konvertieren in pdf-Dokumente werden diese aber korrekt dargestellt.
|
||||
|
||||
### Einstellungen
|
||||
Sie können entweder jedes einzelne Kapitel oder alles gemeinsam in ein pdf-Dokument überführen. Die Dokumente zu den Einzelkapitel befinden sich in den Unterordnern. In jedem Dokument können am Anfang einige Einstellungen vorgenommen werden. Sie können entscheiden, ob das erzeugte pdf-Dokument die Kommentare für Lehrer enthalten soll oder nicht. Gleiches gilt für die Lösungen. In der Tablet-Version wird ausreichend Platz direkt nach den Aufgaben gelassen, dass die Schülerinnen und Schüler ihre Lösungen direkt in das Dokument hineinschreiben können.
|
||||
|
||||
Im Hauptdokument können Sie außerdem wählen, welche Kapitel integriert werden soll. Damit können Sie Ihren Unterricht individuell gestalten.
|
||||
|
||||
### Konvertierung
|
||||
Die Konvertierung in pdf-Dokumente ist aufgrund der mathematischen Formeln nicht ganz einfach, da die notwendige Erweiterung nur in einer bestimmten Linux-Version läuft. Sie funktioniert aber gut, wenn man den vorinstallierten Docker-Container verwendet.
|
||||
|
||||
Installieren Sie dazu das [Docker-System](https://docs.docker.com/get-docker/). Suchen Sie innerhalb des Docker-Programms nach dem Image asciidoc/docker-asciidoc und laden Sie es herunter. Unter Windows starten Sie dann in einer Powershell das Docker-Image:
|
||||
```
|
||||
docker run -it -v F:/informatik/KuenstlicheIntelligenz/MLGit:/documents/ asciidoctor/docker-asciidoctor
|
||||
```
|
||||
Dabei wird in diesem Beispiel der Ordner F:/Informatik/KuenstlicheIntelligenz/MLGit mit dem Docker-Container verbunden und steht dort im Standard-Verzeichnis /documents zur Verfügung.
|
||||
|
||||
Mit dem folgenden Befehl wird dann das .adoc-File in ein pdf-Dokument übersetzt:
|
||||
```
|
||||
asciidoctor-pdf -R "." -o "maschine-learning-schueler.pdf" -a allow-uri-read -a imagesoutdir=./.asciidoctor/stem -r asciidoctor-diagram -r asciidoctor-mathematical machine-learning.adoc
|
||||
```
|
||||
Alternativ können Sie mit "./makePDF.sh" das Gesamtdokument in den drei Versionen für Lehrer, Schüler ohne Tablets und Schüler mit Tablets erzeugen lassen. Stellen Sie vorher im Hauptdokument ein, welche Kapitel einbezogen werden sollen.
|
||||
|
||||
|
||||
BIN
bilder/BilderAdministration/Admin1.png
Normal file
|
After Width: | Height: | Size: 120 KiB |
BIN
bilder/BilderAdministration/Admin2.png
Normal file
|
After Width: | Height: | Size: 89 KiB |
BIN
bilder/BilderAdministration/Admin3.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
bilder/BilderAdministration/Orgas1.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
bilder/BilderAdministration/Orgas10.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
bilder/BilderAdministration/Orgas11.png
Normal file
|
After Width: | Height: | Size: 50 KiB |
BIN
bilder/BilderAdministration/Orgas12.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
bilder/BilderAdministration/Orgas2.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
bilder/BilderAdministration/Orgas3.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
bilder/BilderAdministration/Orgas4.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
bilder/BilderAdministration/Orgas5.png
Normal file
|
After Width: | Height: | Size: 79 KiB |
BIN
bilder/BilderAdministration/Orgas6.png
Normal file
|
After Width: | Height: | Size: 103 KiB |
BIN
bilder/BilderAdministration/Orgas7.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
bilder/BilderAdministration/Orgas8.png
Normal file
|
After Width: | Height: | Size: 38 KiB |
BIN
bilder/BilderAdministration/Orgas9.png
Normal file
|
After Width: | Height: | Size: 107 KiB |
BIN
bilder/BilderGitOnline/Access1.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
bilder/BilderGitOnline/Admineinstellungen.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
bilder/BilderGitOnline/Einstellungen - Mitarbeiter.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
bilder/BilderGitOnline/Einstellungen finden.png
Normal file
|
After Width: | Height: | Size: 8.2 KiB |
BIN
bilder/BilderGitOnline/Erstellen 1.png
Normal file
|
After Width: | Height: | Size: 6.6 KiB |
BIN
bilder/BilderGitOnline/Erstellen 1b.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
bilder/BilderGitOnline/Erstellen 1c.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
bilder/BilderGitOnline/Fork1.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
bilder/BilderGitOnline/Fork2.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
bilder/BilderGitOnline/IssueInZeile.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
bilder/BilderGitOnline/Issues.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
bilder/BilderGitOnline/Loeschen.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
bilder/BilderGitOnline/MitarbeiterBeispiel.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
bilder/GitButler/Branch.png
Normal file
|
After Width: | Height: | Size: 8.3 KiB |
BIN
bilder/GitButler/Commit Message.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
bilder/GitButler/GitButlerBranches.png
Normal file
|
After Width: | Height: | Size: 65 KiB |
BIN
bilder/GitButler/GitButlerClone.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
bilder/GitButler/GitButlerIntro.png
Normal file
|
After Width: | Height: | Size: 71 KiB |
BIN
bilder/GitButler/GitButlerMainView.png
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
bilder/GitButler/Neuer Commit.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
bilder/Konsole/aktuell.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
bilder/Konsole/aufstehen.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
bilder/Konsole/checkout.png
Normal file
|
After Width: | Height: | Size: 7.5 KiB |
BIN
bilder/Konsole/checkout2.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
bilder/Konsole/commit.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
bilder/Konsole/diff.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
BIN
bilder/Konsole/ersterCommit.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
bilder/Konsole/git_add.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
bilder/Konsole/gitbashOeffnen.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
bilder/Konsole/gitstagingcommit.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
bilder/Konsole/mittagessen.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
bilder/Konsole/neuerBranch.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
bilder/Konsole/reset.png
Normal file
|
After Width: | Height: | Size: 4.3 KiB |
BIN
bilder/Konsole/vergangenheit.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
bilder/Konsole/workflow.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
bilder/Konsole/zweiterCommit.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
bilder/Konsole/zweitercommit2.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
bilder/SmartGit/SmartGitBranchingOptions.png
Normal file
|
After Width: | Height: | Size: 4 KiB |
BIN
bilder/SmartGit/SmartGitNew.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
bilder/SmartGit/SmartGitNew2.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
BIN
bilder/SmartGit/Smartgit Abgelehnt.png
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
bilder/SmartGit/Smartgit Merge 1.png
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
bilder/SmartGit/Smartgit Merge 2.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
bilder/SmartGit/Smartgit Merge 3.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
bilder/SmartGit/Smartgit Merge 4.png
Normal file
|
After Width: | Height: | Size: 6 KiB |
BIN
bilder/SmartGit/Smartgit Merge 5.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
bilder/SmartGit/Smartgit Merge 6.png
Normal file
|
After Width: | Height: | Size: 4 KiB |
BIN
bilder/SmartGit/Smartgit Merge 7.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
bilder/SmartGit/Smartgit Merge 8.png
Normal file
|
After Width: | Height: | Size: 18 KiB |