-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexercises.html
1 lines (1 loc) · 18.4 KB
/
exercises.html
1
<!DOCTYPE html><html lang="de"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="description" content="Website ob.cs.hm.edu"><meta name="author" content="Oliver Braun"><meta name="viewport" content="width=device-width, initial-scale=1"><title>ob | exercises</title><link rel="stylesheet" href="/css/plugins/plugins.css"><link rel="stylesheet" href="/css/style.css"></head><body><div id="preloader"><div id="preloader-inner"></div></div><nav class="navbar navbar-toggleable-sm navbar-light bg-faded yamm"><div class="container"><button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><a class="navbar-brand" href="/index.html">ob.cs.hm.edu</a><div class="collapse navbar-collapse" id="navbarSupportedContent"><ul class="nav navbar-nav ml-auto"><li class="dropdown nav-item"><a href="#" class="dropdown-toggle nav-link" data-toggle="dropdown">Lehre</a><ul class="dropdown-menu dropdown-menu-right"><li><a class="dropdown-item" href="/exercises.html">Praktikumsaufgaben</a></li><li><a class="dropdown-item" href="/devbox.html">DevBox-VM</a></li><li class="dropdown-submenu"><a tabindex="-1" href="#" class="dropdown-item" data-toggle="dropdown">Aktuell im WS 19/20</a><ul class="dropdown-menu"><li><a href="/lectures/algdati.html" class="dropdown-item">Algorithmen und Datenstrukturen I</a></li><li><a href="/lectures/vss.html" class="dropdown-item">Verteilte Softwaresysteme</a></li></ul></li><li class="dropdown-submenu"><a tabindex="-1" href="#" class="dropdown-item" data-toggle="dropdown">Geplant für SS 20</a><ul class="dropdown-menu"><li><a href="/lectures/algdatii.html" class="dropdown-item">Algorithmen und Datenstrukturen II</a></li><li><a href="/lectures/fun.html" class="dropdown-item">Funktionale Programmierung</a></li><li><a href="/lectures/vss.html" class="dropdown-item">Verteilte Softwaresysteme</a></li></ul></li><li class="dropdown-submenu"><a tabindex="-1" href="#" class="dropdown-item" data-toggle="dropdown">Alle Lehrveranstaltungen</a><ul class="dropdown-menu"><li><a href="/lectures/algdati.html" class="dropdown-item">Algorithmen und Datenstrukturen I</a></li><li><a href="/lectures/algdatii.html" class="dropdown-item">Algorithmen und Datenstrukturen II</a></li><li><a href="/lectures/compiler.html" class="dropdown-item">Compiler</a></li><li><a href="/lectures/fun.html" class="dropdown-item">Funktionale Programmierung</a></li><li><a href="/lectures/sa.html" class="dropdown-item">Software-Architektur</a></li><li><a href="/lectures/seiib.html" class="dropdown-item">Softwareentwicklung I (IB)</a></li><li><a href="/lectures/seiiib.html" class="dropdown-item">Softwareentwicklung II (IB)</a></li><li><a href="/lectures/swengiib.html" class="dropdown-item">Software Engineering I (IB)</a></li><li><a href="/lectures/swengiiib.html" class="dropdown-item">Software Engineering II (IB)</a></li><li><a href="/lectures/vss.html" class="dropdown-item">Verteilte Softwaresysteme</a></li><li><a href="/lectures/webtech.html" class="dropdown-item">Web-Techniken</a></li><li><a href="/lectures/webtechFK12.html" class="dropdown-item">Web-Techniken (mit FK12)</a></li></ul></li></ul></li><li class="nav-item"><a class="nav-link" href="/theses.html">Abschlußarbeiten</a></li><li class="nav-item"><a class="nav-link" href="/about.html">Prof. Dr. Oliver Braun</a></li><li class="social-nav nav-item"><a href="https://github.com/obcode" class="nav-link"><i class="ion-social-github" data-toggle="tooltip" data-placement="bottom" data-original-title="obcode @ GitHub"></i></a></li><li class="social-nav nav-item"><a href="https://twitter.com/obcode" class="nav-link"><i class="ion-social-twitter" data-toggle="tooltip" data-placement="bottom" data-original-title="@obcode"></i></a></li><li class="social-nav nav-item"><a href="https://www.linkedin.com/in/obcode/" class="nav-link"><i class="ion-social-linkedin" data-toggle="tooltip" data-placement="bottom" data-original-title="LinkedIn"></i></a></li><li class="social-nav nav-item"><a href="https://gitter.im/obcode" class="nav-link"><i class="ion-chatbubbles" data-toggle="tooltip" data-placement="bottom" data-original-title="Gitter"></i></a></li></ul></div></div></nav><section id="content-region-3" class="padding-40 page-tree-bg"><div class="container"><h3 class="page-tree-text">Bearbeitung und Abgabe der Praktikumsaufgaben</h3></div></section><div class="space-70"></div><div class="container"><div class="row"><div class="col-md-2"></div><div class="col-md-8"><div><p>Alle Abgaben meiner Praktikumsaufgaben erfolgen auf <a href="https://github.com/">GitHub</a> mit Hilfe von <a href="https://git-scm.com/">Git</a>.</p><p>Dabei ist mir, neben der Lösung der eigentlichen Aufgabenstellung, sehr wichtig, dass Sie nach den hier beschriebenen Schritten vorgehen.</p><p>Sie bekommen von mir auf dem Aufgabenblatt üblicherweise einen <a href="https://classroom.github.com/">GitHub Classroom</a>-Link über den Sie ein Repository für sich generieren können. Wenn Sie als Team arbeiten sollen, erzeugt der/die Erste mit dem Link ein neues Team und das Repository. Die anderen Teammitglieder treten dann über den Link dem Team bei und bekommen die Rechte für das gemeinsame Repository.</p><p>Lesen Sie sich <strong>vor</strong> dem Bearbeiten meiner Praktikumsaufgaben <strong>unbedingt</strong> die folgenden Punkte durch.</p></div><ul class="nav-tabs nav" role="tablist"><li class="nav-item"><a class="active nav-link" href="#Basics" data-taget="#Basics" role="tab" data-toggle="tab">Git-Basics</a></li><li class="nav-item"><a class="nav-link" href="#Feedback" data-taget="#Feedback" role="tab" data-toggle="tab">Arbeiten, Abgabe und Feedback</a></li><li class="nav-item"><a class="nav-link" href="#Kommunikation" data-taget="#Kommunikation" role="tab" data-toggle="tab">Kommunikation und Hilfe</a></li></ul><div class="tab-content"><div class="space-30"></div><div role="tabpanel" class="tab-pane show active fade" id="Basics" aria-expanded="true"><div><p>Wenn Sie noch nicht mit Git gearbeitet haben, ist <a href="https://try.github.io/">https://try.github.io/</a> eine gute Quelle um Git kennen zu lernen.</p><h4>Beachten Sie dabei folgendes:</h4><ul><li><p>Verwenden Sie lokal beim Committen eine <strong>E-Mail-Adresse</strong>, die Sie auch in GitHub hinzugefügt haben. Anderenfalls kann GitHub Ihnen Ihre Commits nicht zuordnen, was insbesondere bei Teams ein Problem darstellt. Dadurch gewinne ich den Eindruck Sie haben gar nichts beigetragen!</p><p>Infos, wie Sie Ihre E-Mail-Adresse lokal setzen, finden Sie unter <a href="https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup">Getting Started - First-Time Git Setup</a>.</p></li><li><p><strong>Committen</strong> Sie kleine sinnvolle Einheiten mit <strong>vernünftigen</strong> Commit-Messages. Eine Commit-Message sollte kurz beschreiben, was im Gegensatz zum letzten Commit verändert wurde, z.B.</p><ul><li>“Erster Ansatz der Klasse Blablabla.”</li><li>“Ausgabe für rationale Zahlen hinzugefügt.”</li><li>“Funktion hallo gefixt.”</li><li>“Lösung für Teilaufgabe 2b”</li><li>…</li></ul></li><li><p><strong>Pushen</strong> Sie nach jedem Commit. Sie haben damit sofort ein Backup ihres aktuellen Stands auf GitHub. Wenn ein CI-Job für Sie eingerichtet ist, bekommen Sie sofort eine Rückmeldung. Wenn Sie im Team arbeiten, können die anderen Team-Mitglieder sofort sehen, was Sie gemacht haben und evtl. darauf reagieren.</p></li></ul></div></div><div role="tabpanel" class="tab-pane fade" id="Feedback" aria-expanded="false"><div><p>Die Abgabe erfolgt immer als <a href="https://help.github.com/articles/about-pull-requests/">Pull-Request</a> (PR). Committen Sie <strong>nie</strong> direkt in den <code>master</code>-Branch. Die Lösung muss am Ende in einem Branch <code>develop</code> sein und als Differenz zu dem <code>master</code>-Branch abgegeben werden.</p><p>Tipp: Sie können in GitHub auf die Branches klicken und den <code>develop</code> als Default setzen. Damit sehen Sie als erstes immer den <code>develop</code>-Branch auf der Website und beim Clonen landen Sie auch gleich im <code>develop</code>-Branch.</p><p>Das Feedback bekommen Sie von meinen Tutoren oder mir als Kommentar zum PR. Wenn <strong>ich</strong> den PR genehmige, haben Sie die entsprechende Aufgabe <strong>erfolgreich</strong> abgegeben.</p><p>Folgen Sie, wenn Sie alleine sind dem im Folgenden beschriebenen <em>GitHub Flow</em>. Im Team folgen Sie dem weiter unten beschriebenen <em>Git-Flow mit PRs</em>.</p><h3>Alleine: GitHub Flow</h3><p>Wenn Sie eine Aufgabe alleine lösen, reicht es, wenn Sie dem <a href="https://guides.github.com/introduction/flow/">GitHub Flow</a> folgen. Sie können natürlich auch alleine nach dem, weiter unten beschriebenen, git-flow vorgehen.</p></div><div class="blog-post-img"><img src="img/githubflow.png" class="img-fluid" alt></div><center><small>Quelle:</small><a href="https://hackernoon.com/15-tips-to-enhance-your-github-flow-6af7ceb0d8a3"><small>https://hackernoon.com/15-tips-to-enhance-your-github-flow-6af7ceb0d8a3</small></a></center><div><p>Erzeugen Sie nach dazu einen neuen Branch <code>develop</code> und wechseln Sie in diesen. Arbeiten Sie ausschließlich in diesem oder in weiteren, davon abgezweigten Branches, <strong>nie</strong> aber im <code>master</code>. Committen und pushen Sie wie gewohnt <strong>oft</strong> und mit <strong>vernünftigen</strong> Commit-Messages.</p><p>Um abzugeben erzeugen Sie einen PR gegen den <code>master</code>-Branch und tragen Sie <strong>mich</strong> und, sofern vorhanden, den für Sie zuständigen Tutor unter <strong>Reviewers</strong> ein.</p><p>Feedback erhalten Sie dann durch das Review. Wenn ihr PR durch <strong>mich</strong> und evtl. den Tutor <strong>approved</strong> ist, haben Sie die Abgabe <strong>bestanden</strong> und können den PR mergen.</p><h3>Im Team: Git-Flow mit Pull-Requests</h3><p>Wenn Sie im Team arbeiten, ist es sinnvoll nicht nur in einem sondern in mehreren Branches zu arbeiten. Auch in diesem Fall ist der <code>master</code>-Branch tabu.</p><p>Vincent Driessen hat in einem <a href="https://nvie.com/posts/a-successful-git-branching-model/">Blog-Post</a> ein Git-Branching-Modell vorgeschlagen, das mittlerweile unter dem Namen <strong>git-flow</strong> als <a href="https://github.com/petervanderdoes/gitflow-avh">Erweiterung</a> von Git verfügbar ist. Einige Git-GUIs, wie z.B. <a href="https://www.sourcetreeapp.com/">SourceTree</a>, enthalten direkte Unterstützung für git-flow.</p><p>Dies ist aber letzendlich nicht notwendig. Sie können das git flow Modell auch einfach mit den in Git verfügbaren Kommandos nutzen.</p></div><div class="blog-post-img"><img src="img/gitflow.png" class="img-fluid" alt></div><div><p>Git-flow hat mit GitHub nichts zu tun. Daher sind auch die PRs nicht Teil von git-flow.</p><p>Gehen Sie daher, mit oder ohne git-flow-Toolunterstützung, folgendermaßen vor:</p><ul><li><strong>keine</strong> Commits direkt im <code>master</code></li><li>der gemeinsame Branch heisst <code>develop</code><ul><li>in diese können “kleine” Commits gemacht werden</li></ul></li><li>alle neuen Features die Sie implementieren wollen, entwickeln Sie in einem neuen Feature-Branch, den Sie von <code>develop</code> abzweigen</li><li>wenn Sie mit einem Feature fertig sind, erstellen Sie einen PR gegen den <code>develop</code>-Branch <ul><li>je nach Aufgabenstellung müssen Sie einen Reviewer für den PR auswählen oder können gleich selbst mergen</li></ul></li><li>die Abgabe erfolgt als PR vom <code>develop</code>-Branch in den <code>master</code>-Branch, wie oben, beim GitHub Flow, beschrieben.</li></ul><p>Um sich das Leben einfach zu machen, sollten Sie auf jeden Fall git-flow nutzen, außer es gibt ein Riesenproblem, bei dem ich nicht einmal helfen kann.</p><p>Mit git-flow gehen Sie dann wie im Folgenden beschrieben vor.</p><p>Installieren Sie zunächst git-flow, falls Sie kein GUI, wie z.B. SourceTree benutzen, das die Unterstützung für git-flow gleich mitbringt. Auch <a href="https://gitforwindows.org/">Git for Windows</a> hat in der aktuellen Version git-flow mit an Bord. Die Installation ist <a href="https://github.com/petervanderdoes/gitflow-avh/wiki/Installation">hier</a> beschrieben.</p><p>Initialisieren des Repositories für git-flow:</p><p><code>git flow init</code></p><p>Sie können alle Fragen mit der Default-Antwort übernehmen. Sie haben damit einen <code>develop</code>-Branch erzeugt und ihn automatisch gleich ausgecheckt.</p><p>Pushen Sie den <code>develop</code>-Branch dann noch auf GitHub, <strong>wenn noch niemand aus Ihrem Team das getan hat</strong>:</p><p><code>git push origin develop</code></p><h4>Ein neues Feature entwickeln bzw. eine Teilaufgabe lösen</h4><p>Wenn Sie mit einem neuen Feature bzw. einer Teilaufgabe <code>meinNeuesFeature</code> beginnen wollen:</p><p><code>git flow feature start meinNeuesFeature</code></p><p>Damit befinden Sie sich in einem neuen Feature-Branch, der, wie oben beschrieben, vom <code>develop</code>-Branch abzweigt.</p><p>Um ihn für die anderen Teammitglieder auf GitHub zur Verfügung zu stellen:</p><p><code>git flow feature publish meinNeuesFeature</code></p><p><strong>Achtung:</strong> Jetzt weicht es von dem normalen git-flow ab:</p><p>Pushen Sie ihren Branch auf GitHub und erzeugen Sie einen Pull-Request gegen den <code>develop</code>-Branch.</p><p>Je nach Aufgabenstellung muss vielleicht ein Review durch ein Teammiglied erfolgen. Wenn nicht, können Sie mit git flow bei sich lokal mergen</p><p><code>git flow feature finish meinNeuesFeature</code></p><p>Das schließt den PR auch automatisch. Der PR ist dann nur dafür da gewesen um nachvollziehbar zu machen, was gemerged wurde. Sie müssen anschließend noch den aktuellen Stand des <code>develop</code>-Branches auf GitHub pushen.</p><p>Wenn, gemäß Aufgabestellung, jemand anderes den PR mergen muss, kann er/sie das direkt auf GitHub machen. Sie als Entwickler müssen dann selbst in den <code>develop</code> zurück (<code>git checkout develop</code>) und die gemergeten Commits von GitHub pullen. Anschließend löschen Sie dann ihren Feature-Branch:</p><p><code>git branch -D meinNeuesFeature</code></p><h4>Abgabe</h4><p>Die Abgabe oder ein Zwischenrelease erfolgt als Pull-Request von <code>develop</code> in den <code>master</code>. Sie können entweder den PR direkt erzeugen und mich und den für Sie zuständigen Tutor als <strong>Reviewer</strong> eintragen. Dann gibt es wieder Feedback und wenn es ein <em>Approval</em> von mir gibt, können Sie in den <code>master</code> mergen.</p><p>Mit git flow gehen Sie folgendermaßen vor:</p><p>Sie beginnen ein neues Release mit einem Bezeichner. Verwenden Sie den Bezeichner <code>Abgabe</code> wenn nicht anders in der Aufgabenstellung vorgeschrieben:</p><p><code>git flow release start Abgabe</code></p><p>Das erzeugt einen Release-Branch vom <code>develop</code>, in dem Sie noch Release-spezifische Commits machen könnten (z.B. die neue Versionsnummer in irgendwelchen Dateien eintragen).</p><p>Veröffentlichen Sie Ihren Release-Branch anschließend mit</p><p><code>git flow release publish Abgabe</code></p><p>und erzeugen Sie einen PR vom Release-Branch in den <code>master</code>-Branch. <strong>Mergen Sie diesen PR auf keinen Fall über die GitHub-Website</strong>. Der PR ist nur dafür da um ein Feedback bzw. eine Freigabe von mir zu bekommen.</p><p>Wenn ich den PR approved habe, führen Sie lokal folgendes aus:</p><p><code>git flow release finish</code><br><code>git push --all</code><br><code>git push --tags</code></p><p>Wenn Sie z.B. SourceTree nutzen, können Sie gleich beide Branches inklusive der Tags pushen und brauchen nicht in den Branches hin und her zu springen.</p><p>Der <a href="https://danielkummer.github.io/git-flow-cheatsheet/index.de_DE.html">git-flow-Spickzettel</a> gibt einen guten Überblick über die git-flow Kommandos.</p></div></div><div role="tabpanel" class="tab-pane fade" id="Kommunikation" aria-expanded="false"><div><h3>Frage / Hilfe zu Ihrem Code</h3><p>Sollten Sie eine Frage zu Ihrem Code haben oder konkrete Hilfe benötigen, erzeugen Sie in dem entsprechenden Repository über die GitHub-Seite des Repository ein <a href="https://help.github.com/articles/about-issues/">Issue</a>. In diesem Issue beschreiben Sie Ihr Problem und verlinken auf zusätzliche Informationen, wie Code oder Travis/Jenkins-Job. Nutzen Sie <a href="https://guides.github.com/features/mastering-markdown/">Markdown</a> um Ihr Issue besser lesbar zu gestalten. Ein gut lesbares Issue bearbeite ich viel lieber und schneller!</p><h4>Und jetzt das wichtigste:</h4><p>Damit ich oder ein Tutor überhaupt mit bekommt, dass Sie eine Frage haben, führen Sie folgende Schritte durch:</p><ul><li>weisen Sie es (Ihrem Tutor und) mir zu (<em>Assignees</em>) und</li><li>setzen Sie das Label <strong>help wanted</strong> oder <strong>question</strong></li></ul><p>Ohne diese beiden Schritte werden die Issues von uns <strong>nicht registriert</strong> und daher <strong>nicht bearbeitet</strong>! Durch die Zuweisung werden wir per E-Mail informiert und können, schnellstmöglich, auf Ihre Frage reagieren.</p><h3>Gitter</h3><p>Zur Kommunikation bezüglich einer Lehrveranstaltung von mir gibt es jeweils einen <a href="https://gitter.im/">Gitter</a>-Room. Sie finden ihn auf der Seite zur Veranstaltung links unter <em>Links</em>.</p><p>Stellen Sie in diesem Raum inbesondere alle Fragen, die nicht nur Sie interessieren könnten. Wer weiter helfen kann, darf gerne weiter helfen. Mich selbst finden Sie in den Räumen jeweils unter dem Namen <a href="https://gitter.im/obcode">obcode</a>.</p><p>Nutzen Sie auch in Gitter die Möglichkeit Ihre Nachricht in <a href="https://guides.github.com/features/mastering-markdown/">Markdown</a> zu formatieren. Damit werden insbesondere Code-Schnipsel viel besser lesbar.</p></div></div></div></div></div></div><div class="space-70"></div><div><div class="row"><div class="col-md-12 text-center"><span>Generated with <a href="https://spike.js.org/">Spike</a> on <a href="https://travis-ci.org/obcode/ob.cs.hm.edu">Travic CI</a> — Please report issues on <a href="https://github.com/obcode/ob.cs.hm.edu/issues">GitHub</a></span><div></div><span>© 2020 Oliver Braun | <a href="/impressum.html">Impressum</a>| <a href="/privacy.html">Datenschutzerklärung</a>| <a href="/api.html">API</a>| <a href="https://terraform.cs.hm.edu/">Jenkins</a></span></div></div></div><script src="/js/plugins/plugins.js"></script><script src="/js/app.js"></script></body></html>