<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Development Archive - Entwicklungshilfe NRW</title>
	<atom:link href="https://entwicklungshilfe.nrw/blog/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>https://entwicklungshilfe.nrw/blog/category/development/</link>
	<description>PHP-Schulungen für effektive Webentwicklung, praxisorientierte Workshops und Seminare für besseres Webdevelopment</description>
	<lastBuildDate>Mon, 23 Sep 2019 18:04:38 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://entwicklungshilfe.nrw/wp-content/uploads/2026/02/cropped-favicon-32x32.png</url>
	<title>Development Archive - Entwicklungshilfe NRW</title>
	<link>https://entwicklungshilfe.nrw/blog/category/development/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>JavaScript-Optimierung in Magento</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/05/06/javascript-optimierung-magento/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/05/06/javascript-optimierung-magento/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Fri, 06 May 2016 10:00:20 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Magento]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=480</guid>

					<description><![CDATA[<p>Magento, eines der meist verbreitesten Shop-Systeme hat ein gravierendes und lange bekanntes Problem mit dem Umgang mit JavaScript &#8211; wir erklären euch unsere Probleme der JavaScript-Optimierung bei Magento. Einige Magento-Entwickler werden mit hoher Wahrscheinlichkeit schon einmal an dem Punkt angelangt sein, wo der Kunde entweder nach einer Verbesserung der Shop-Ladezeit gefragt hat, oder andere entsprechende [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/05/06/javascript-optimierung-magento/">JavaScript-Optimierung in Magento</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://magento.com" target="_blank" rel="noopener noreferrer">Magento</a>, eines der <a href="http://www.onlineshop-basics.de/ecommerce-studie/shopsoftware.php" target="_blank" rel="noopener noreferrer">meist</a> <a href="http://cometrics.co/statistics/magento-usage/" target="_blank" rel="noopener noreferrer">verbreitesten</a> Shop-Systeme hat ein gravierendes und lange bekanntes Problem mit dem Umgang mit JavaScript &#8211; wir erklären euch unsere Probleme der JavaScript-Optimierung bei Magento. Einige Magento-Entwickler werden mit hoher Wahrscheinlichkeit schon einmal an dem Punkt angelangt sein, wo der Kunde entweder nach einer Verbesserung der Shop-Ladezeit gefragt hat, oder andere entsprechende Maßnahmen zur Erhöhung seiner Performance oder Ähnlichem gefordert hat.</p>
<p>Eine Standard Magento Konfiguration wird bereits mit über 20 JavaScript-Dateien ausgeliefert. Somit ist für die meisten Entwickler schnell klar, dass die Reduzierung des JavaScripts oder dessen Zusammenführung in einer Datei anstatt 20 einen Geschwindigkeitsvorteil und eine bessere Performance bringen wird. Verbunden ist dies mit vergleichsweise wenig Aufwand im Gegenteil zu anderen Optimierungsmaßnahmen. Für solche Fälle bietet Magento standardmäßig die Funktion &#8222;JavaScript-Dateien kombinieren&#8220;, welche jedoch mehr Nachteile als Vorteile mit sich bringt. Die Nachteile werden wir in diesem Blogpost anhand von drei Beispielen detailliert erläutern.</p>
<h2>Die Ausgangssituation:</h2>
<p>Bei der Verwendung des von Magento bereitgestellten Features werden alle JavaScript-Dateien in einer Datei kombiniert, aus der Größe des Contents einen Hash generiert und als Datei abgespeichert. In unseren weiteren Beispielen benutzen wir anstatt der Hashes einfache Namen wie zum Beispiel &#8222;abc.js&#8220; und &#8222;xyz.js&#8220;. Die Magento-Entwickler haben bei der Implementierung ihres Features jedoch einige zum Teil gravierende Fehler nicht berücksichtigt.</p>
<h3>Fehler 1: Minimierte oder kombinierte JavaScript-Dateien können den ganzen Shop unbenutzbar machen!</h3>
<p>Sobald 2-3 minimierte JavaScript-Dateien in das bestehende Shopsystem integriert werden, treten bereits die ersten Probleme auf.<br />
Auch wenn der Entwickler auf die Idee kommen sollte Magentos JavaScript-Dateien zu komprimieren, wird es unter Umständen zu Fehlern kommen.<br />
Das Problem an der Sache ist der Coding-Style der Magento Entwickler. JavaScript ermöglicht es beendete Funktionen ohne Semikolon abzuschließen, wovon die Magento Entwickler sehr oft Gebrauch machen. Sollte nun ein Entwickler die Magento JavaScript-Dateien zur Performance- und/oder Ladezeitoptimierung komprimieren und die Kombinierfunktion einschalten, entstehen dadurch kritische Fehler.</p>
<p>Durch das Komprimieren der Dateien schrumpft der Dateiinhalt auf exakt eine Zeile. Sobald beispielsweise eine &#8222;var&#8220; Deklaration am Anfang der zweiten Datei steht und in der ersten Datei eine Funktion ohne abschließendes Semikolon beendet wurde (was in 95% der Fälle zutrifft), wird der Code fehlerhaft geparsed und beide Dateien verlieren Ihre eigentliche Funktionalität.</p>
<h3>Fehler 2: Kombinieren der JavaScript-Dateien birgt das Risiko, die Ladezeit der Seite zu erhöhen!</h3>
<p>Jetzt fragen sich sicherlich einige, wie dass denn überhaupt möglich ist wenn man doch anstatt 20 Dateien nur noch eine lädt und somit die HTTP-Requests in Folge der JavaScript-Optimierung massiv gesunken sind. Die Frage lässt sich durch ein einfaches Beispiel illustrieren. Nehmen wir an, auf der Startseite des Shops werden die JavaScript-Dateien &#8222;abc.js&#8220; und &#8222;xyz.js&#8220; geladen. Diese Dateien werden überall geladen. Nach dem Aktivieren der Kombination werden diese zu (Beispiel) &#8222;abcdef.js&#8220; kombiniert. Wenn der Nutzer die Startseite besucht wird die Datei einmal ausgeliefert und danach gecached. So weit, so gut. Sollte der Nutzer jedoch eine Produktseite besuchen, welche außer &#8222;abc.js&#8220; und &#8222;xyz.js&#8220; auch noch &#8222;foo.js&#8220; und &#8222;bar.js&#8220; benötigt, wird nochmals eine kombinierte Datei erstellt (Beispiel) &#8211; &#8222;ghijkl.js&#8220;. Da der Nutzer bereits die beiden ersten Dateien im Cache hat, muss der Browser jetzt unnötiger Weise trotzdem beide Dateien in Form von ghijkl.js ausliefern, welche auch &#8222;foo.js&#8220; und &#8222;bar.js&#8220; enthält.</p>
<h3>Fehler 3: Massiver Overhead ohne jeglichen Nutzen bei Verwendung von Protokollen wie SPDY oder HTTP/2</h3>
<p>Falls der Shopbetreiber bzw. dessen Entwickler einen Server betreiben, welcher die Protokolle SPDY oder dessen standardisierten Nachfolger HTTP/2 benutzt, ist die ganze Kombination von JavaScript-Dateien als JavaScript-Optimierung mehr Nachteil als Vorteil. Die HTTP/2 Spezifikation erlaubt es, parallel in nur einer einzigen HTTP-Request JavaScript-Dateien auszuliefern. Je nach Größe und Masse der einzubindenden JavaScript-Dateien kann dies beim Kombinieren zu erheblichen Leistungseinbußen führen. Angenommen ein großer Shop hat 40 JavaScript-Dateien, wobei einer dieser Dateien eine für JavaScript gigantische Größe von 700 Kilobytes hat. Diese Datei wird beim Kombinieren jedes mal gelesen und wieder in die kombinierte Datei geschrieben. Dieser Overhead ist bei der Verwendung von SPDY oder HTTP/2 unnötig und verursacht eine deutlich spür- und messbare Erhöhung der &#8222;Time To First Byte&#8220;, die Zeit die der Shop zum Senden des ersten Bytes an den User braucht.</p>
<h2>Testszenarien und Auswertungen der JavaScript-Optimierung</h2>
<p>Die hier gezeigten Ausschnitte des Testtools <a href="http://www.webpagetest.org/" target="_blank" rel="noopener noreferrer">Webpagetest</a> sollen lediglich der Illustration des Ladevorgangs dienen.<br />
Die Zeiten der einzelnen Dateien sind hier nicht wirklich relevant, da wir kein wiederhol- und überprüfbares Testsetup aufgesetzt haben. Das soll in einem späteren Thread aber folgen.</p>
<p><strong>Ladevorgang bei Verwendung von HTTP/1.1</strong></p>
<figure id="attachment_551" aria-describedby="caption-attachment-551" style="width: 476px" class="wp-caption alignleft"><img fetchpriority="high" decoding="async" class="wp-image-551 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/http1_unmerged.png" alt="ohne JavaScript-Optimierung" width="476" height="784" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/http1_unmerged.png 476w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/http1_unmerged-182x300.png 182w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/http1_unmerged-182x300@2x.png 364w" sizes="(max-width: 476px) 100vw, 476px" /><figcaption id="caption-attachment-551" class="wp-caption-text">ohne JavaScript-Optimierung</figcaption></figure>
<p><strong>Ladevorgang bei Verwendung von HTTP/1.1 mit Kombinierungstool</strong></p>
<figure id="attachment_550" aria-describedby="caption-attachment-550" style="width: 756px" class="wp-caption alignleft"><img decoding="async" class="wp-image-550 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/http1_merged.png" alt="JavaScript-Optimierung - einfaches Kombinieren" width="756" height="334" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/http1_merged.png 756w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/http1_merged-300x133.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/http1_merged-300x133@2x.png 600w" sizes="(max-width: 756px) 100vw, 756px" /><figcaption id="caption-attachment-550" class="wp-caption-text">JavaScript-Optimierung &#8211; einfaches Kombinieren</figcaption></figure>
<p><strong>Ladevorgang bei Verwendung von HTTP/2</strong></p>
<figure id="attachment_543" aria-describedby="caption-attachment-543" style="width: 420px" class="wp-caption alignleft"><img decoding="async" class="wp-image-543 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/nonmerged_http2.png" alt="JavaScript-Optimierung durch Verwendung von http/2" width="420" height="887" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/nonmerged_http2.png 420w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/nonmerged_http2-142x300.png 142w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/nonmerged_http2-142x300@2x.png 284w" sizes="(max-width: 420px) 100vw, 420px" /><figcaption id="caption-attachment-543" class="wp-caption-text">JavaScript-Optimierung durch Verwendung von http/2</figcaption></figure>
<p><strong>Ladevorgang bei Verwendung von HTTP/2 mit Kombinierungstool</strong></p>
<figure id="attachment_546" aria-describedby="caption-attachment-546" style="width: 574px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="wp-image-546 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/merged_http2-1.png" alt="Kombinierte JavaScript-Dateien und http/2" width="574" height="53" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/merged_http2-1.png 574w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/05/merged_http2-1-300x28.png 300w" sizes="auto, (max-width: 574px) 100vw, 574px" /><figcaption id="caption-attachment-546" class="wp-caption-text">Kombinierte JavaScript-Dateien und http/2</figcaption></figure>
<h2>Fazit</h2>
<p>Trotz eines eingebauten JavaScript-Kombinierungstools ist es nicht ohne Weiteres möglich, Magentos eingebaute Performance Tools wie &#8222;JavaScript-Dateien kombinieren&#8220; in einem produktivem Umfeld ohne ausgiebiges manuelles Testen zu benutzen. Es können schnell unverschuldet Fehler entstehen, welche die ganze Seite unbenutzbar machen. Des weiteren kann bei Benutzung von Magentos Funktion schnell eine Erhöhung der Seiten-Ladezeit anstatt der gewünschten Reduzierung eintreten.</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/05/06/javascript-optimierung-magento/">JavaScript-Optimierung in Magento</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/05/06/javascript-optimierung-magento/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>git-flow &#8211; das Branching-Modell</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/04/29/git-flow-branching-model/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/04/29/git-flow-branching-model/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Fri, 29 Apr 2016 10:00:41 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Development]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=475</guid>

					<description><![CDATA[<p>In diesem Artikel befassen wir uns mit dem Aufsetzen und der Handhabung von Branches (Zweigen). Wir gehen davon aus, dass du als Leser genug Erfahrung mit der Installation und Handhabung von einfachen Git-Features wie commit, push, und pull hast. In der Welt der Versionskontrollsysteme ist Git mit Abstand eines der effektivsten und einfachsten Tools die [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/04/29/git-flow-branching-model/">git-flow &#8211; das Branching-Modell</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In diesem Artikel befassen wir uns mit dem Aufsetzen und der Handhabung von Branches (Zweigen). Wir gehen davon aus, dass du als Leser genug Erfahrung mit der Installation und Handhabung von einfachen Git-Features wie commit, push, und pull hast.</p>
<p>In der Welt der Versionskontrollsysteme ist <a href="https://git-scm.com/">Git</a> mit Abstand eines der effektivsten und einfachsten Tools die uns zur Verfügung stehen, um unseren Arbeitsalltag bzw. unseren Workflow zu optimieren. In diesem Artikel zeigen wir euch, wir ihr Git mit git-flow effektiver nutzt.</p>
<h1>Git Branching</h1>
<p>Wir gehen in unserem Beispiel davon aus, dass zwei neue Features für unser aktuelles Projekt geplant sind. Diese wollen wir, ohne uns als Entwickler gegenseitig auf die Füße zu treten, zeitgleich erledigen.</p>
<p>Dafür gibt es in Versionskontrollsysteme sogenannte Branches. Bei Git enthält jeder Branch eine eigene Kopie des jeweiligen Repositories zum Zeitpunkt der Erstellung des Branches. Den Verlauf einer Feature-Entwicklung im normalen Git-Workflow erklärt der nächste Absatz. Person A erstellt hier zum Beispiel eine Navigation speziell für Smartphones in unserem Projekt.</p>
<h2>Einfacher Workflow ohne Branching-Modell:</h2>
<p>Als erstes beziehen (clonen) wir das Git-Respository vom Server, um eine lokale Kopie des gesamten Projektes zu erhalten. In diesem wird nun auf dem Hauptbranch (Master) das Feature &#8222;Smartphone Navigation&#8220; nach und nach programmiert. Die Schritte schliessen jeweils mit commit und anschliessendem push der Änderungen an das globale Repository ab. Die Webseite auf dem Produktions-Server wird anschliessend mit einem pull aktualisiert.</p>
<p><b>Das Problem an diesem Beispiel ist Folgendes:</b><br />
Sobald eine weitere Person am selben Projekt arbeitet kann es zu Überschneidungen kommen. Angenommen Person A arbeitet an der Smartphone Navigation während Person B einen wichtigen Bugfix einspielt. Dadurch, dass Person B seinen Bugfix so schnell wie möglich auf der Live-Instanz des Projektes haben will, wird nach dem Hinzufügen des Bugfixes sofort der Master-Branch auf den neusten Stand gebracht. Das hat die Nebenwirkung zur Folge, dass auch Teile des Codes von Person A auf den Live-Server geladen werden und somit Probleme bzw. Fehler produzieren werden, da man nicht sicher sein kann, dass Person A seine Arbeit beendet hat. Und seien wir ehrlich &#8211; in Projekten mit mehr als einem Entwickler kommt es IMMER zu solchen Zuständen.</p>
<figure id="attachment_521" aria-describedby="caption-attachment-521" style="width: 150px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-521 size-thumbnail" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/03/transport-1208189_1920-150x150.jpg" alt="Mit git-flow effektiver arbeiten" width="150" height="150" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/03/transport-1208189_1920-150x150.jpg 150w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/03/transport-1208189_1920-150x150@2x.jpg 300w" sizes="auto, (max-width: 150px) 100vw, 150px" /><figcaption id="caption-attachment-521" class="wp-caption-text">Mit git-flow effektiver arbeiten</figcaption></figure>
<h2>Lösungsansatz mit Git und einem einfachen Branching-Modell</h2>
<p>Um solche Probleme zu umgehen hat man in Git die Möglichkeit einen oder mehrere Branches zu erstellen. Ein Branch ist eine Abzweigung der Codebasis zu einem bestimmten Punkt. Ab diesem Punkt kann man auf seinem Zweig (Branch) parallel zum Beispiel zum Hauptstrang in Ruhe entwicklen und erst das fertige Feature wieder zurück mergen.</p>
<p>Hier ein Beispiel:<br />
Person A möchte eine Navigation für Smartphones erstellen ohne jemandem in die Quere zu kommen und geht jetzt wie folgt vor:<br />
Git-Repository vom Server ziehen für eine lokale Kopie des gesamten Projektes. Neuen Branch erstellen mit dem Namen &#8222;develop&#8220;.<br />
Auf diesem Branch kann jetzt unabhängig von anderen Branches weiter gearbeitet werden. Jegliche Änderung auf dem neu erstellten Branch wird zunächst keinerlei Auswirkung auf andere Branches haben. Sobald das neue Feature fertig ist, wird Person A seine Änderungen pushen und seine Änderungen in den Hauptbranch &#8222;mergen&#8220; (zusammenführen).<br />
Dieses Merging vom Branch &#8222;develop&#8220; in den Hauptbranch des Projektes bewirkt, dass alle Änderungen im Smartphone Branch nun auch auf dem Hauptzweig des gesamten Projektes verfügbar sind.</p>
<p>Sollte während der Entwicklungszeit der Smartphone-Navigation Person B einen kritischen Bugfix in den Hauptbranch pushen, kann der Administrator ohne Einfluss der Codeänderungen für die Smartphone-Navigation den Hauptbranch updaten. Der Bugfix der auf dem Hauptbranch von Person B eingefügt wird, hat keinerlei Auswirkungen auf die Arbeit von Person A (Smartphone-Navigation Branch). Auch werden Codeänderungen von Person A keinen Einfluss auf die Arbeit von Person B haben, da beide verschiedene Branches verwenden.</p>
<p>Wenn dann jedoch nach der Fertigstellung der Smartphone-Navigation das gesamte Projekt diese neue Navigation erhalten soll, wird der Branch des neuen Features, in unserem Fall &#8222;develop&#8220;, einfach mit dem Hauptbranch zusammengeführt, woraufhin alle anderen Projektmitglieder die neuen Änderungen schließlich auch erhalten. Ausgenommen davon sind natürlich wieder die Projektmitglieder, die sich gerade auf einem anderen Branch befinden.</p>
<h2>Lösungsansatz git-flow als Branching-Modell</h2>
<p>&#8222;<a href="http://nvie.com/posts/a-successful-git-branching-model" target="_blank" rel="noopener noreferrer">Git-flow</a>&#8220; ist ein Tool das den Workflow von Git erweitert und fest spezifiziert. Es kann per Kommandozeile oder per Tool bedient werden. So bieten zum Beispiel <a href="https://www.sourcetreeapp.com/" target="_blank" rel="noopener noreferrer">Sourcetree von Atlassian</a> und <a href="https://www.jetbrains.com/phpstorm/" target="_blank" rel="noopener noreferrer">PhpStorm</a> Untersützung für git-flow. Die sehr feste Spezifizierung von git-flow hält den Workflows konstant und fördert den dezentralisierten Entwicklungsansatz. Zusätzlich zu den bekannten Hauptzweigen &#8222;master&#8220; und &#8222;develop&#8220; werden sogenannte Support-Branches erstellt, welche später für differenzierte Aufgaben verwendet werden. Diese werden auf verschiedene Art und Weise mit unseren Hauptzweigen &#8222;master&#8220; und &#8222;develop&#8220; zusammengeführt. Wir werden diese Support-Branches anhand von drei Beispielen kurz erklären.</p>
<h3>Support-Branches bei git-flow</h3>
<p>Derzeit haben wir in unserem Projekt zwei Zweige, &#8222;master&#8220; und &#8222;develop&#8220;. &#8222;Master&#8220; ist die aktuelle Live-Version des Projektes während &#8222;develop&#8220; einen aktuellen Entwicklungsstand darstellt. &#8222;Git-flow&#8220; fügt nun drei weitere Arten von Branches zu unserem Workflow: &#8222;release&#8220;, &#8222;feature&#8220;, und &#8222;hotfix&#8220;.</p>
<p><strong>Hotfix-Branches</strong></p>
<p>Der Hotfix-Branch wird von den beteiligten Entwicklern lediglich dazu benutzt Fehlerbehebungen des Live-Systems durchzuführen. Sobald ein Fehler behoben ist, wird der Hotfix-Branch geschlossen und mit &#8222;master&#8220; und &#8222;develop&#8220; zusammengeführt. Dieses führt auf der einen Seite zu einem sauber aktualisierten Live-System und auf der anderen Seite wird der Hotfix in die Entwicklungsschiene transferiert, da sämtliche anderen Branches vom &#8222;develop&#8220; Branch abhängen.<br />
<img decoding="async" class="size-main-full wp-image-521" src="http://nvie.com/img/hotfix-branches@2x.png" alt="Hotfix-Branch Workflow" height="400" />Hotfix-Branch Workflow © <a href="http://nvie.com">nvie.com</a></p>
<p><strong>Feature-Branches</strong></p>
<p>Der Feature-Branch wird als Zweig zur Erstellung neuer Funktionen verwendet. Sobald eine neue Funktionalität abgeschlossen ist, wird der Feature-Branch auf mit dem Develop-Branch zusammengeführt und kann auf einer Testinstanz unabhängig von unserem Master branch getestet werden. Feature-Branches sollten in dieser Struktur lediglich lokal vorkommen.<br />
<img decoding="async" class="size-main-full" src="http://nvie.com/img/merge-without-ff@2x.png" alt="Feature-Branch Workflow" height="400" />Feature-Branch Workflow © <a href="http://nvie.com">nvie.com</a></p>
<p><strong>Release-Branches</strong></p>
<p>Der Release-Branch wird bei jedem neuen Release oder großen Codeänderung (Milestone) benutzt. Ein Release kann zum Beispiel eine Sammlung von verschiedenen Features sein, welche als Release-Branch gruppiert bzw. zusammengefasst werden, um gemeinsam deployed zu werden. Ein Release-Branch sollte immer mit &#8222;master&#8220; als auch &#8222;develop&#8220; zusammengeführt werden, wobei letzterer für die Qualitätssicherung inklusive Testing Vorrang hat.</p>
<h2>Fazit</h2>
<p>Das Arbeiten mit git-flow oder generell die korrekte Nutzung von Branching stellt eine qualitätssichernde sowie Workflow-optimierende Maßnahme da, die uns hilft sauber und getrennt voneinander unseren Aufgaben nach zu gehen, ohne die Arbeit des Anderen zu beeinträchtigen.</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/04/29/git-flow-branching-model/">git-flow &#8211; das Branching-Modell</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/04/29/git-flow-branching-model/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PhpStorm mit dem Ticketsystem Redmine nutzen</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/01/31/phpstorm-mit-ticketsystem-redmine-nutzen/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/01/31/phpstorm-mit-ticketsystem-redmine-nutzen/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Sun, 31 Jan 2016 18:57:11 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Entwicklertools]]></category>
		<category><![CDATA[Configuration]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[Infrastruktur]]></category>
		<category><![CDATA[Seminar]]></category>
		<category><![CDATA[Training]]></category>
		<category><![CDATA[Versionskontrolle]]></category>
		<category><![CDATA[Workshop]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=305</guid>

					<description><![CDATA[<p>In diesem Tutorial für Webdeveloper zeige ich, wie man die Entwicklungsumgebung PhpStorm mit dem Ticketsystem Redmine verbindet und das Tasksystem von PhpStorm zusammen mit git-flow als Workflow umsetzen kann. Voraussetzungen für einen erfolgreichen Workflow Grundlage für den hier gezeigten Workflow sind PhpStorm als IDE mit installiertem git-flow-Plugin sowie ein funktionierendes Ticketsystem Redmine. Natürlich gibt es Alternativen zu [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/01/31/phpstorm-mit-ticketsystem-redmine-nutzen/">PhpStorm mit dem Ticketsystem Redmine nutzen</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In diesem Tutorial für Webdeveloper zeige ich, wie man die Entwicklungsumgebung PhpStorm mit dem Ticketsystem Redmine verbindet und das Tasksystem von PhpStorm zusammen mit git-flow als Workflow umsetzen kann.</p>
<h3>Voraussetzungen für einen erfolgreichen Workflow</h3>
<p>Grundlage für den hier gezeigten Workflow sind <a href="https://www.jetbrains.com/phpstorm/" target="_blank" rel="noopener noreferrer">PhpStorm</a> als IDE mit installiertem <a href="https://plugins.jetbrains.com/plugin/7315" target="_blank" rel="noopener noreferrer">git-flow-Plugin</a> sowie ein funktionierendes Ticketsystem <a href="http://www.redmine.org/" target="_blank" rel="noopener noreferrer">Redmine</a>. Natürlich gibt es Alternativen zu dieser Kombination. PhpStorm arbeitet mit sehr vielen Systemen zusammen, und auch andere IDEs haben ähnliche Funktionen. Der Workflow im Versionskontrollsystem basiert auf unserer <a href="http://presentations.entwicklungshilfe.nrw/git_flow.html">git-flow-Präsentation</a> und ist aus meiner Sicht zwar im Feinen anpassbar, im Groben aber alternativlos.</p>
<h3>Ticketsystem Redmine richtig einstellen</h3>
<p>Das Ticketsystem sollte von außen erreichbar sein. Der zur Verknüpfung benutzte User sollte im Ticketsystem aktiv sein und Projekte und Tasks – im Weiteren auch Issues genannt – zugewiesen haben. Zusätzlich muss die REST-Api in der Konfiguration des Ticketsystems aktiviert sein.</p>
<figure id="attachment_322" aria-describedby="caption-attachment-322" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-322 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/redmine_setting-1024x148.png" alt="Einstellungen im Ticketsystem redmine für PhpStorm" width="1024" height="148" /><figcaption id="caption-attachment-322" class="wp-caption-text">Einstellungen im Ticketsystem redmine für PhpStorm</figcaption></figure>
<h3>In PhpStorm geht es weiter</h3>
<p>In PhpStorm geht man zunächst über die Tastenkombi cmd+&#8220;,&#8220; (Mac) in die Einstellungen und navigiert zu Tools -&gt; Tasks -&gt; Servers. Dort setzt man nach Auswahl des Ticketsystems die URL und Zugangsdaten zu seinem Ticketsystem.</p>
<figure id="attachment_314" aria-describedby="caption-attachment-314" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-314 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_task_server-1024x689.png" alt="PhpStorm-Einstellungen für die Verbindung mit dem Ticketsystem" width="1024" height="689" /><figcaption id="caption-attachment-314" class="wp-caption-text">PhpStorm-Einstellungen für die Verbindung mit dem Ticketsystem</figcaption></figure>
<p>Ein Klick auf den Test-Button liefert das Ergebnis:</p>
<figure id="attachment_308" aria-describedby="caption-attachment-308" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-308 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_settings-1024x420.png" alt="PhpStorm mit dem Ticketsystem Redmine" width="1024" height="420" /><figcaption id="caption-attachment-308" class="wp-caption-text">PhpStorm mit dem Ticketsystem Redmine</figcaption></figure>
<p>Im zweiten Reiter stellt man die Commit-Einstellungen ein. Das Ticketsystem Redmine ist in der Lage, Commit-Nachrichten auszulesen und darauf zu reagieren. Eine sinnvolle Einstellung zur Automatisierung spart hier wertvolle Zeit.</p>
<figure id="attachment_313" aria-describedby="caption-attachment-313" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-313 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_tasks_settings_2-1024x682.png" alt="Einstellungen in PhpStorm für die Verbindung mit dem Ticketsystem" width="1024" height="682" /><figcaption id="caption-attachment-313" class="wp-caption-text">Einstellungen in PhpStorm für die Verbindung mit dem Ticketsystem</figcaption></figure>
<h2>Optimaler Workflow in PhpStorm mit dem Ticketsystem Redmine</h2>
<p>Die Voraussetzungen sind hier ein Projekt im ausgecheckten develop-Branch, ein vorhandenes Ticket und eine eingerichtete Entwicklungsumgebung.</p>
<p>Die Steuerungsleiste für das Taskmanagement befindet sich im rechten oberen Bereich.</p>
<figure id="attachment_307" aria-describedby="caption-attachment-307" style="width: 838px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-307 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_settings_server_task.png" alt="Leiste für die Ticketsystemsteuerung" width="838" height="52" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_settings_server_task.png 838w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_settings_server_task-300x19.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_settings_server_task-768x48.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_settings_server_task-300x19@2x.png 600w" sizes="auto, (max-width: 838px) 100vw, 838px" /><figcaption id="caption-attachment-307" class="wp-caption-text">Leiste für die Ticketsystemsteuerung</figcaption></figure>
<p>Über das Dropdown kommt man in den &#8222;Task öffnen&#8220;-Dialog.</p>
<figure id="attachment_321" aria-describedby="caption-attachment-321" style="width: 750px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-321 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_open_task-e1454265308986.png" alt="Öffnen einer Issue in PhpStorm" width="750" height="401" /><figcaption id="caption-attachment-321" class="wp-caption-text">Öffnen einer Issue in PhpStorm</figcaption></figure>
<p>Nach erfolgreichem Öffnen eines Tasks sollte man eine für den Task eingerichtete Changelist in PhpStorm und auf Ebene der Versionskontrolle einen Feature-Branch ausgecheckt haben.</p>
<figure id="attachment_312" aria-describedby="caption-attachment-312" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-312 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-1024x361.png" alt="Fortschritt im PHP-Projekt" width="1024" height="361" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-1024x361.png 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-300x106.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-768x271.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-1024x361@2x.png 2048w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-300x106@2x.png 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist2-768x271@2x.png 1536w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-312" class="wp-caption-text">Fortschritt im PHP-Projekt</figcaption></figure>
<p>Sollte man seine relevanten Entwicklungen lokal abgeschlossen haben, kommt der Zeitpunkt, an dem man seinen Code committet. Durch die Nutzung der taskrelevanten Changelisten ist dies selbst bei Bearbeitung mehrerer Issues in einem Projekt durchschaubar. Zudem verringern die voreingestellten Informationen aus dem Ticketsystem die manuell einzugebenden Informationen.</p>
<figure id="attachment_311" aria-describedby="caption-attachment-311" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-311 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit-1024x772.png" alt="Commit der neuen Dateien" width="1024" height="772" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit-1024x772.png 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit-300x226.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit-768x579.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit.png 1517w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_commit-300x226@2x.png 600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-311" class="wp-caption-text">Commit der neuen Dateien</figcaption></figure>
<p>Vor dem anschließenden Push zeigt PhpStorm eine Zusammenfassung der Änderungen.</p>
<figure id="attachment_320" aria-describedby="caption-attachment-320" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-320 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push-1024x1008.png" alt="Push in unser zentrales Versionskontrollsystem" width="1024" height="1008" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push-1024x1008.png 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push-300x295.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push-768x756.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push.png 1170w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_push-300x295@2x.png 600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption id="caption-attachment-320" class="wp-caption-text">Push in unser zentrales Versionskontrollsystem</figcaption></figure>
<p>Als Abschluss muss man das Feature leider noch manuell über das git-flow-Plugin schließen, aber ich hoffe, dass das in naher Zukunft automatisiert wird.</p>
<figure id="attachment_317" aria-describedby="caption-attachment-317" style="width: 526px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-317 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_gitflow-e1454265851423.png" alt="Der Feature Branch wird geschlossen" width="526" height="351" /><figcaption id="caption-attachment-317" class="wp-caption-text">Der Feature Branch wird geschlossen</figcaption></figure>
<p>Als Meldung sollte PhpStorm einblenden, dass der Feature-Branch erfolgreich zurückgemerged wurde.</p>
<figure id="attachment_318" aria-describedby="caption-attachment-318" style="width: 750px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-318 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_tasks-e1454265896201.png" alt="Erfolgsmeldung aus PhpStorm für unseren Workflow" width="750" height="112" /><figcaption id="caption-attachment-318" class="wp-caption-text">Erfolgsmeldung aus PhpStorm für unseren Workflow</figcaption></figure>
<p>Es kann zudem vorkommen, dass PhpStorm die Changelist nicht löscht. Um die Ordnung nicht zu verlieren, hilft das manuelle Löschen.</p>
<figure id="attachment_316" aria-describedby="caption-attachment-316" style="width: 750px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-316 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_changelist-e1454265959607.png" alt="Manuelles Löschen der Changelist in PhpStorm" width="750" height="441" /><figcaption id="caption-attachment-316" class="wp-caption-text">Manuelles Löschen der Changelist in PhpStorm</figcaption></figure>
<p>Außerdem kann es helfen, bei zu vielen Issues in der Liste auch diese manuell zu löschen.</p>
<figure id="attachment_315" aria-describedby="caption-attachment-315" style="width: 750px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-315 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/phpstorm_workflow_tasks_2-e1454266031571.png" alt="Entfernen der Issue aus der Taskliste" width="750" height="218" /><figcaption id="caption-attachment-315" class="wp-caption-text">Entfernen der Issue aus der Taskliste</figcaption></figure>
<h3>Überprüfung in der Versionskontrolle und im Ticketsystem Redmine</h3>
<p>Wer ähnlich wie wir <a href="http://www.entwicklungshilfe.nrw/blog/ticketsystem-mit-versionskontrolle/">Redmine mit gitolite und dem redmine git hosting</a> nutzt, kann jetzt in seinem Projekt bei Redmine im Projektarchiv seinen neuen Workflow überprüfen.</p>
<figure id="attachment_309" aria-describedby="caption-attachment-309" style="width: 1024px" class="wp-caption alignleft"><img loading="lazy" decoding="async" class="wp-image-309 size-large" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/01/workflow_redmine-1024x162.png" alt="Workflow Ansicht im Ticketsystem Redmine" width="1024" height="162" /><figcaption id="caption-attachment-309" class="wp-caption-text">Workflow-Ansicht im Ticketsystem Redmine</figcaption></figure>
<p>Weiterführende Informationen zum Beispiel vom PhpStorm-Hersteller Jetbrains bekommt ihr <a href="https://www.jetbrains.com/phpstorm/help/tasks.html" target="_blank" rel="noopener noreferrer">hier</a>.</p>
<p><em>Nutzt ihr in euren PHP-Projekten eine andere Kombination von Ticketsystem, Versionskontrolle und IDE? Wenn ja, dann schreibt uns hier doch bitte mal, welche das sind. Denn von einem solchen Know-how-Austausch profitieren ja letztlich alle. Die oben beschriebene Kombination <a href="http://www.entwicklungshilfe.nrw/seminare/phpstorm-effektiv-mit-ticketsystem-nutzen/">schulen</a> wir übrigens auch.</em></p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/01/31/phpstorm-mit-ticketsystem-redmine-nutzen/">PhpStorm mit dem Ticketsystem Redmine nutzen</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/01/31/phpstorm-mit-ticketsystem-redmine-nutzen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
