GitWorkflow: Unterschied zwischen den Versionen

Aus Das Sopra Wiki
Langenfeld (Diskussion | Beiträge)
Langenfeld (Diskussion | Beiträge)
KKeine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
Für Git existieren verschieden Ansätze um Branching sinvoll zur Organisation des Projekts und der Entwicklung zu nutzen  
Für Git existieren verschieden Ansätze um Branching sinnvoll zur Organisation des Projekts und der Entwicklung zu nutzen  
<ref>[https://git-scm.com/book/de/v2/Git-Branching-Branches-in-a-Nutshell Branching in a Nutshell]</ref>
<ref>[https://git-scm.com/book/de/v2/Git-Branching-Branches-in-a-Nutshell Branching in a Nutshell]</ref>
<ref>https://nvie.com/posts/a-successful-git-branching-model/</ref>
<ref>https://nvie.com/posts/a-successful-git-branching-model/</ref>
Zeile 6: Zeile 6:
== Sopra-Branching ==
== Sopra-Branching ==


Für das Sopra empfehlen wir ein mit wenig Verwaltungsaufwand und merging verbundenes Vorgehen, in dem die beiden Branches ''master'' und ''dev'' verwendet werden. Beide branches erfüllen spezielle Rollen:
Für das Sopra empfehlen wir ein mit wenig Verwaltungsaufwand und Merging verbundenes Vorgehen, in dem die beiden Branches ''master'' und ''dev'' verwendet werden. Beide Branches erfüllen spezielle Rollen:
   
   
* <code>dev</code>: die Arbeit jedes Entwicklers wird auf den branch ''dev'' gerebased, sodass eine ordentliche lineare Abfloge von Änderungen entsteht.
* <code>dev</code>: die Arbeit jedes Entwicklers wird auf den Branch ''dev'' gerebased, sodass eine ordentliche lineare Abfolge von Änderungen entsteht.
* <code>master</code>: jede fertige weiterentwicklung des Projekts (z.B.: das Sprintincrement oder die Hausuafgabe) wird auf den ''master'' branch gemergt.
* <code>master</code>: jede fertige Weiterentwicklung des Projekts (z.B.: das Sprintincrement oder die Hausaufgabe) wird auf den ''master'' branch gemerged.


Jeder Gruppe ist es überlassen selbst für spezielle Aufgaben mehr Branches zu verwenden, das mergen des wöchentlichen Inkrements in den ''master'' branch ist jedoch obligatorisch, da nur dieser im Gruppentreffen und zur Beurteilung der mitarbeit herangezogen wird.
Jeder Gruppe ist es überlassen selbst für spezielle Aufgaben mehr Branches zu verwenden, das Mergen des wöchentlichen Inkrements in den ''master'' branch ist jedoch obligatorisch, da nur dieser im Gruppentreffen und zur Beurteilung der Mitarbeit herangezogen wird.


=== Tägliche Arbeit Synchronisieren ===
=== Tägliche Arbeit Synchronisieren ===


Jedes mal wenn Sie mit dem remote repository synchronisieren sollten Sie den Befehl <code>git pull --rebase</code> verwenden, um die zwischenzeitlich auf dem Server eingegangenen Commits zu sychronisieren. Wie im [[Git|Gitartikel]] erklärt entspricht dieser Befehl <code>git fetch; git rebase</code>, sodass eine einfach zu lesende und pflegende lineare History entsteht <ref>https://www.endoflineblog.com/oneflow-a-git-branching-model-and-workflow</ref> (beim rebasen, genau wie beim mergen können Konflikte entstehen, die Git nicht automatisch lösen kann und die durch den Benutzer [[Git#Konflikte lösen| gelöst]] werden müssen, bevor das Ergebnis gepusht werden kann).
Jedes Mal wenn Sie mit dem remote repository synchronisieren, sollten Sie den Befehl <code>git pull --rebase</code> verwenden, um die zwischenzeitlich auf dem Server eingegangenen Commits zu synchronisieren. Wie im [[Git|Gitartikel]] erklärt, entspricht dieser Befehl <code>git fetch; git rebase</code>, sodass eine einfach zu lesende und pflegende lineare History entsteht <ref>https://www.endoflineblog.com/oneflow-a-git-branching-model-and-workflow</ref> (beim rebasen, genau wie beim mergen können Konflikte entstehen, die Git nicht automatisch lösen kann und die durch den Benutzer [[Git#Konflikte lösen| gelöst]] werden müssen, bevor das Ergebnis gepusht werden kann).


==== Beispiel ====
==== Beispiel ====


[[Hausaufgabe#Aufgabe 4: Texte lesen| Aufagbe 4]] der Hausaufgabe erfordert, dass alle Studenten einen Commit pushen. Im unten gezeigten Beispiel hat Studentin Tina ihre Änderung gepusht, nachdem Ben sein repository geclont hatte (d.h. Benjamin hat ihren commit <code>d030e28</code> nicht in seinem lokalen Repository).
[[Hausaufgabe#Aufgabe 4: Texte lesen| Aufagbe 4]] der Hausaufgabe erfordert, dass alle Studenten einen Commit pushen. Im unten gezeigten Beispiel hat Studentin Tina ihre Änderung gepusht, nachdem Benjamin sein Repository geklont hatte (d.h. Benjamin hat ihren Commit <code>d030e28</code> nicht in seinem lokalen Repository).


<source>
<source>
Zeile 28: Zeile 28:
</source>
</source>


Da Benjamin beim pushen gewarnt wird, dass seiner lokale kopie von <code>dev</code> Commits fehlen, die im remote repository vorhanden sind. Benjamin führt <code>git pull --rebase</code> aus. Die lokale historie sieht nun wie folgt aus, Commit <code>c91275a</code> wurde hinter <code>d030e28</code> gehängt:
Da Benjamin beim Pushen gewarnt wird, dass seiner lokalen Kopie von <code>dev</code> Commits fehlen, die im remote repository vorhanden sind. Benjamin führt <code>git pull --rebase</code> aus. Die lokale Historie sieht nun wie folgt aus, Commit <code>c91275a</code> wurde hinter <code>d030e28</code> gehängt:


<source>
<source>
Zeile 36: Zeile 36:
</source>
</source>


Benjamin fürht nun einen Push aus um seine Änderungen mit dem Server zu synchronisieren.
Benjamin führt nun einen Push aus um seine Änderungen mit dem Server zu synchronisieren.


<source>
<source>
Zeile 60: Zeile 60:
</source>
</source>


Nachdem alle Aufgaben für den Sprint beendet sind, wird der Inkement (alles was sich auf ''dev'' befindet) in den ''master'' branch übergragen. Dazu wird der ''dev'' branch in den ''master'' branch gemergt (<code>git checkout master && git merge dev</code>) wahlweise kann der merge auch über einen [[Gitea#Pullrequest| Pull Request in Gitea]] erledigt werden. Der Ergebnis sollte in beiden Fällen wie folgt aussehen:
Nachdem alle Aufgaben für den Sprint beendet sind, wird der Inkrement (alles was sich auf ''dev'' befindet) in den ''master'' Branch übertragen. Dazu wird der ''dev'' Branch in den ''master'' Branch gemerged (<code>git checkout master && git merge dev</code>). Wahlweise kann der Merge auch über einen [[Gitea#Pullrequest| Pull Request in Gitea]] erledigt werden. Der Ergebnis sollte in beiden Fällen wie folgt aussehen:


<source>
<source>
Zeile 76: Zeile 76:
</source>
</source>


Im folgenden Sprint wird weiter am ''dev'' branch gearbeitet [[Kategorie:Code-Beispiele]].
Im folgenden Sprint wird weiter am ''dev'' Branch gearbeitet [[Kategorie:Code-Beispiele]].


<source>
<source>