<?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>Git Versionierung Seminar Workshop</title>
	<atom:link href="https://entwicklungshilfe.nrw/blog/tag/git/feed/" rel="self" type="application/rss+xml" />
	<link>https://entwicklungshilfe.nrw/blog/tag/git/</link>
	<description>PHP-Schulungen für effektive Webentwicklung, praxisorientierte Workshops und Seminare für besseres Webdevelopment</description>
	<lastBuildDate>Mon, 23 Sep 2019 18:11:43 +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>Git Versionierung Seminar Workshop</title>
	<link>https://entwicklungshilfe.nrw/blog/tag/git/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Git auf der Command Line CLI einsetzen</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/02/11/git-auf-der-command-line-cli/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/02/11/git-auf-der-command-line-cli/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Thu, 11 Feb 2016 07:58:00 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Entwicklertools]]></category>
		<category><![CDATA[Git]]></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=382</guid>

					<description><![CDATA[<p>Git ist ein häufig genutztes Versionstool in PHP-Projekten. Allerdings wird häufig mit grafischen Oberflächen wie Sourcetree gearbeitet. Webdeveloper nutzen diese Tools häufig, ohne genau zu wissen, was im Hintergrund genau passiert. Daher zeigen wir dir in diesem Artikel, wie du das alles schnell und effektiv auf der Command Line nutzen kannst. Das hat einige Vorteile: Du bist [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/02/11/git-auf-der-command-line-cli/">Git auf der Command Line CLI einsetzen</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Git ist ein häufig genutztes Versionstool in PHP-Projekten. Allerdings wird häufig mit grafischen Oberflächen wie <a href="https://www.sourcetreeapp.com/" target="_blank" rel="noopener noreferrer">Sourcetree</a> gearbeitet. Webdeveloper nutzen diese Tools häufig, ohne genau zu wissen, was im Hintergrund genau passiert. Daher zeigen wir dir in diesem Artikel, wie du das alles schnell und effektiv auf der Command Line nutzen kannst. Das hat einige Vorteile: Du bist schneller und hast gleichzeitig viel mehr <a href="http://www.entwicklungshilfe.nrw/blog/category/git-schulung/">Wissen über Git</a> und Kontrolle über deine Software und Arbeitsschritte.</p>
<figure id="attachment_391" aria-describedby="caption-attachment-391" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log.png" rel="attachment wp-att-391"><img decoding="async" class="wp-image-391 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log-300x148.png" alt="Terminal Git-Log - www.slant.co" width="300" height="148" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log-300x148.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log-768x380.png 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log.png 976w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/terminal-git-log-300x148@2x.png 600w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-391" class="wp-caption-text">Terminal Git-Log &#8211; www.slant.co</figcaption></figure>
<p>In Stellenausschreibungen steht heute immer öfter die Anforderung, Git über die Command Line zu nutzen. Gerade bei <a href="https://www.gulp.de/knowledge-base/markt-und-trends/umfrage-ergebnis-noch-junior-oder-schon-senior.html" target="_blank" rel="noopener noreferrer">Senior-Entwicklern</a> wird dieses Wissen bereits explizit vorausgesetzt. Das <a href="https://de.wikipedia.org/wiki/Kommandozeile" target="_blank" rel="noopener noreferrer">Command-Line</a>-Wissen kannst du dann auch anwenden, wenn dir kein Rechner mit Sourcetree zur Verfügung steht, weil du dich vielleicht direkt auf den Linux-Servern lokal oder remote bewegen musst.</p>
<h2>Git Commands, die tatsächlich gebraucht werden</h2>
<p>Es sind nicht so viele <a href="https://confluence.atlassian.com/bitbucketserver/basic-git-commands-776639767.html" target="_blank" rel="noopener noreferrer">Git Commands</a>, die für die tägliche Arbeit gebraucht werden, wie man vielleicht glaubt. Hier mal ein einfacher Task mit den Git-Commands direkt auf der Command Line.</p>
<h3>Git Repository klonen</h3>
<p><strong>git clone https://url.com/example-repo</strong></p>
<figure id="attachment_393" aria-describedby="caption-attachment-393" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen.jpg" rel="attachment wp-att-393"><img fetchpriority="high" decoding="async" class="wp-image-393 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-300x213.jpg" alt="Git-Repository klonen" width="300" height="213" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-300x213.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-768x546.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-1024x728.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-269x192.jpg 269w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen.jpg 1920w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-300x213@2x.jpg 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-768x546@2x.jpg 1536w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-Repository-klonen-269x192@2x.jpg 538w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-393" class="wp-caption-text">Git Repository klonen</figcaption></figure>
<p>Mit dem Git Command wird das Repo in das Verzeichnis &#8222;example-repo&#8220; geklont. Gibt man hinter der URL ein anderes Ziel oder Target an, wird ein anderer Ordner genommen. Das macht bei der späteren Anwendung keinen Unterschied, kann aber zu mehr Übersicht in der Dateistruktur genutzt werden. Mit der Angabe von &#8222;.&#8220; wird das Repository in das aktuelle Verzeichnis geklont. Das ist zwar ein seltener Anwendungsfall, spart einem aber bei Bedarf Zeit. Dafür muss der Ordner allerdings vollständig leer sein. Auch die Verzeichnisse der PHP-IDEs, wie <a href="http://www.entwicklungshilfe.nrw/seminare/phpstorm-best-practice/">PhpStorm</a>, dürfen hier nicht vorhanden sein.</p>
<h3>Branch erstellen</h3>
<p><strong>git checkout -b myNewTask</strong><br />
Mit dem Checkout-Befehl und dem Parameter -b wird ein neuer Branch &#8222;myNewTask&#8220; erstellt und automatisch auf diesen gewechselt. Hier ist darauf zu achten, auf welchen Branch man sich zu dem Zeitpunkt der Erstellung befindet, und natürlich auch darauf, dass man den aktuellsten Stand auscheckt – also vorher ein &#8222;git pull&#8220; ausgeführt hat.</p>
<h3>Developing auf dem Branch</h3>
<p><strong>git add . &amp;&amp; git commit -m “#myNewBranch add css file”</strong><br />
oder<br />
<strong>git add layout/mynewtask.css &amp;&amp; git commit -m “#myNewBranch add css file”</strong></p>
<figure id="attachment_392" aria-describedby="caption-attachment-392" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch.jpg" rel="attachment wp-att-392"><img decoding="async" class="wp-image-392 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-300x200.jpg" alt="Developing auf dem Branch" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-1024x683.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch.jpg 1920w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-300x200@2x.jpg 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Developing-auf-dem-Branch-768x512@2x.jpg 1536w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-392" class="wp-caption-text">Developing auf dem Branch</figcaption></figure>
<p>Generell soll ja bei jeder funktionierenden Änderung ein Commit gemacht werden. Hier ist Disziplin gefragt. Grafische Tools wie Sourcetree verleiten jedoch dazu, dies zu einem späteren Zeitpunkt zu machen. Hier kann man sehr einfach einzelne geänderte Zeilen separaten Commits zuweisen. Das bedeutet leider noch lange nicht, dass der Commit tatsächlich alles tut, was er soll, und wie gewünscht funktioniert hat.</p>
<p>Insofern ist es besser, regelmäßig kleine Commits zu machen. Der Git-Add-Befehl dient dabei einmal für das separate File und einmal für alles seit dem letzten Commit. Auch hier gilt: Regelmäßige und sinnvolle Commits machen einem das Leben leichter und sind effektiver. Vorher ist es zudem immer sinnvoll, sich die aktuellen Änderungen mit &#8222;git status&#8220; noch einmal anzeigen zu lassen. Denn schließlich kommt es vor, dass man etwas übersehen hat. Das trifft auch auf von der Applikation generierte Files zu, die eventuell noch über .gitignore ausgeschlossen werden müssen.</p>
<h3>Commit Messages</h3>
<figure id="attachment_394" aria-describedby="caption-attachment-394" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages.jpg" rel="attachment wp-att-394"><img loading="lazy" decoding="async" class="wp-image-394 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages-300x200.jpg" alt="Commit-Messages" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages-1024x682.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages.jpg 1280w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Commit-Messages-300x200@2x.jpg 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-394" class="wp-caption-text">Commit Messages</figcaption></figure>
<p>Damit man die Historie einer Entwicklung nachvollziehen kann, sind Commit Messages wichtig. Diese müssen aussagekräftig sein und beinhalten idealerweise eine <a href="http://www.entwicklungshilfe.nrw/seminare/phpstorm-effektiv-mit-ticketsystem-nutzen/">Ticket-ID</a>. Denn somit können die Arbeitsschritte direkt zugeordnet werden. Nicht aussagekräftige Commit Messages indes schaden dem Team und einem selbst.</p>
<p>Mit <a href="https://git-scm.com/book/uz/v2/Customizing-Git-Git-Hooks" target="_blank" rel="noopener noreferrer">Pre Hooks</a> ist es möglich, Commits ohne Ticket-ID direkt zu unterbinden. Das kann sogar erweitert werden, dass sich das Ticket im richtigen Status befinden muss. Solche Maßnahmen einzuführen und umzusetzen, ist allerdings nicht so einfach wie deren technische Implementierung.</p>
<p>Es gibt einige Spaßseiten zu dem Thema wie beispielsweise <a href="http://www.commitlogsfromlastnight.com/" target="_blank" rel="noopener noreferrer">Commits from last night</a> – dabei ist das Thema doch eigentlich sehr ernst. Denn es dient der Dokumentation der eigenen Arbeit und zeigt, dass du ein Profi bist. Soll heißen: Arbeite immer möglichst professionell. Das ist wichtig und richtig.</p>
<h2>Git-flow installieren und sofort nutzen</h2>
<p><strong>git flow feature start myNewBranch</strong><br />
<strong>git flow feature finish myNewBranch</strong></p>
<figure id="attachment_395" aria-describedby="caption-attachment-395" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow.jpg" rel="attachment wp-att-395"><img loading="lazy" decoding="async" class="wp-image-395 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-300x200.jpg" alt="Git-Flow" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-1024x683.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow.jpg 1920w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-300x200@2x.jpg 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-flow-768x512@2x.jpg 1536w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-395" class="wp-caption-text">Git-flow</figcaption></figure>
<p><a href="http://www.entwicklungshilfe.nrw/seminare/git-flow-git-branching-model-fuer-agile-software-projekte/">Git-flow</a> hat sich in vielen Projekten bewährt und wird vor allem gerne bei neuen Projekten eingesetzt. Auf dem <a href="http://www.rogoit.de/webdesign-typo3-blog-duisburg/category/mac-snippet/" target="_blank" rel="noopener noreferrer">Mac</a> ist es schnell mit <a href="http://brew.sh/" target="_blank" rel="noopener noreferrer">Homebrew</a> installiert, und nach einem &#8222;git flow init&#8220; kann es nach einigen Bestätigungen der Default-Settings sofort eingesetzt werden. Mit dem oben aufgeführten Start-Befehl wird dabei ein neuer Branch aus dem aktuellen Develop Branch erstellt. Danach kann man sein Feature entwickeln und mit dem Finish-Befehl wieder abschließen. Hier wird ein Merge zurück in den Develop Branch ausgeführt und der Feature Branch sofort gelöscht. Falls man das aber nicht unbedingt möchte, geht es auch mit Hotfixes und Releases.</p>
<p>Eine gute Übersicht zu all dem bietet <a href="http://danielkummer.github.io/git-flow-cheatsheet/" target="_blank" rel="noopener noreferrer">http://danielkummer.github.io/git-flow-cheatsheet/</a>. Ausführliche Informationen zu Git-flow gibt es außerdem unter <a href="https://github.com/nvie/gitflow" target="_blank" rel="noopener noreferrer">https://github.com/nvie/gitflow</a>. Wir haben uns im praktischen Einsatz dazu entschlossen, nach dem Git-Flow-Workflow zu arbeiten, die zusammengeführten Branches allerdings zu archivieren und zu erhalten.</p>
<h2>Git-Workflow nur auf der Command Line</h2>
<figure id="attachment_386" aria-describedby="caption-attachment-386" style="width: 337px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI.png" rel="attachment wp-att-386"><img loading="lazy" decoding="async" class="wp-image-386 size-full" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI.png" alt="Git auf der Command Line CLI" width="337" height="208" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI.png 337w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI-300x185.png 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI-103x65.png 103w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI-163x102.png 163w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI-103x65@2x.png 206w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/Git-auf-der-Command-Line-CLI-163x102@2x.png 326w" sizes="auto, (max-width: 337px) 100vw, 337px" /></a><figcaption id="caption-attachment-386" class="wp-caption-text">Git auf der Command Line CLI</figcaption></figure>
<p>Der Git-flow ist eine Zusammenfassung von Befehlen, die man selbstverständlich auch eigenhändig und einzeln ausführen kann. In meinen Augen ist aber ein großer Nachteil, dass Branches, die zurückgemerged wurden, auch gelöscht werden.</p>
<p>Persönlich finde ich es zudem besser, Bugfixes auf dem Feature Branch durchzuführen und sich öfter mit dem aktuellen Stand abzugleichen. So kann man die Arbeit auf einem Feature besser dokumentieren. Das Ganze geht manuell auf der Command Line – CLI – wie folgt:</p>
<p>// Aktuellen Develop Branch auschecken und aktualisieren<br />
<strong>git checkout develop</strong><br />
<strong> git pull</strong></p>
<p>// Feature Branch für Jira Ticket SUP-123 erstellen<br />
<strong>git checkout -b feature/SUP-123</strong></p>
<p>// Commits auf das Ticket<br />
<strong>git status</strong><br />
<strong>git add . &amp;&amp; git commit -m “#SUP-123 what i have done”</strong></p>
<p>// Git Pushes sollten mindestens jeden Abend durchgeführt werden – und zwar auf jeden Fall vor den Merges, egal in welche Richtung<br />
<strong>git status</strong><br />
<strong>git push</strong></p>
<p>// Feature Branch zurück in Develop bringen<br />
<strong>git checkout develop</strong><br />
<strong>git pull</strong><br />
<strong>git merge feature/SUP-123</strong><br />
<strong>git status</strong></p>
<p>// Tag setzen<br />
<strong>git tag -a v1.2.0 -m “Version v1.2.0”</strong><br />
// Push mit Tags<br />
<strong>git push &amp;&amp; git push &#8211;tags</strong></p>
<p>Die oben aufgeführten Commands in <a href="http://www.entwicklungshilfe.nrw/seminare/oh-my-zsh-mit-agnoster-theme/">oh-my-zsh</a><br />
// Aktuellen Develop Branch auschecken und aktualisieren<br />
<strong>gco develop</strong><br />
<strong>gl</strong></p>
<p>// Feature Branch für Jira Ticket SUP-123 erstellen<br />
<strong>gcb feature/SUP-123</strong></p>
<p>// Commits auf das Ticket<br />
<strong>gst</strong><br />
<strong>gaa &amp;&amp; gcmsg “#SUP-123 was ich gerade getan habe”</strong><br />
<strong>gst</strong></p>
<p>// Git Push sollte mindestens jeden Abend durchgeführt werden – und zwar auf jeden Fall vor den Merges, egal in welche Richtung<br />
<strong>gst</strong><br />
<strong>gp</strong></p>
<p>// Feature Branch zurück in Develop bringen<br />
<strong>gco develop</strong><br />
<strong>gl</strong><br />
<strong>gm feature/SUP-123</strong><br />
<strong>gst</strong></p>
<p>// Tag setzen<br />
<strong>git tag -a v1.2.0 -m “Version v1.2.0”</strong></p>
<p>// Push mit Tags<br />
<strong>gp &amp;&amp; gp &#8211;tags</strong></p>
<p>Mit oh-my-zsh sind eine Vielzahl von Git Commands als Alias abgelegt. Im praktischen Einsatz kommen in meinen Augen die oben abgebildeten zum Tragen. Allein gaa &amp;&amp; gcmsg &#8222;my message&#8220; bringen einem sehr viel, da sie ein häufiger Anwendungsfall sind. Auch gc für git checkout geht schnell in Fleisch und Blut über.</p>
<h2>Probleme mit Git</h2>
<p><a href="https://www.ralfebert.de/git/mergekonflikte-beheben/" target="_blank" rel="noopener noreferrer">Git-Konflikte</a> sind ein großes Thema bei Git und natürlich auch Themen wie Rebase. Aber in diesem Artikel gehe ich nicht zusätzlich auf diese Themen ein. In Zukunft werden wir hier in unserem <a href="http://www.entwicklungshilfe.nrw/blog/">Webdevelopment-Blog</a> das Thema Git auch in anderen Zusammenhängen aufgreifen. Auch gehe ich nicht auf Tools, wie <a href="https://github.com/jonas/tig" target="_blank" rel="noopener noreferrer">Tig</a> ein. Aber natürlich ist es wichtig und richtig, mit visuellen Tools zu arbeiten.</p>
<h2>Fazit zu Git auf der Command Line CLI</h2>
<p>Git ist in der heutigen Zeit des Webdevelopments der Quasi-Standard. Jeder Entwickler, egal ob Frontend oder Backend, muss damit umgehen können. Man braucht und darf keine Ausreden bei der Nutzung einer Command Line haben. Nur so wird man zum Profi – sonst ist man nur ein Anwender. Ein User.</p>
<p>In diesem Artikel ist ein einfaches Beispiel über die Entwicklung eines <a href="https://www.atlassian.com/git/tutorials/comparing-workflows/" target="_blank" rel="noopener noreferrer">Feature Branches</a> abgebildet. Man sieht ganz deutlich, dass nur wenige Commands nötig sind. Es ist wichtig, diese einfachen Vorgänge zu 100 Prozent auf der Command Line durchführen zu können und dies auch regelmäßig zu tun. Nur so lernt man Git richtig.</p>
<h2>Unsere Git-PHP-Schulung</h2>
<figure id="attachment_396" aria-describedby="caption-attachment-396" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung.jpg" rel="attachment wp-att-396"><img loading="lazy" decoding="async" class="wp-image-396 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung-300x143.jpg" alt="Git-Flow PHP-Schulung" width="300" height="143" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung-300x143.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung-768x365.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung-702x336.jpg 702w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung.jpg 800w, https://entwicklungshilfe.nrw/wp-content/uploads/2016/02/git-flow-php-schulung-300x143@2x.jpg 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-396" class="wp-caption-text">Git-flow: PHP-Schulung</figcaption></figure>
<p>Git wird von vielen Webdevelopern benutzt. Sie haben es aber leider häufig nicht verinnerlicht oder verstanden, warum man damit genau so arbeitet, wie man es tut. In unserer Schulung gehen wir ganz praktisch vor und erklären Git von den Grundlagen bis zu praktischen und etablierten Workflows. Wir gehen auf die Anwendungsfehler ein und geben unsere persönliche Erfahrung direkt an die Teilnehmer weiter. Es ist eine sehr individuelle Intensiv-Schulung. Alle Informationen zu dem Thema gibt es auf<br />
<a href="http://www.entwicklungshilfe.nrw/seminare/git-flow-git-branching-model-fuer-agile-software-projekte/">http://www.entwicklungshilfe.nrw/seminare/git-flow-git-branching-model-fuer-agile-software-projekte/</a></p>
<p><em>Wie nutzt du Git bislang? Hast du es schon mal per Command Line versucht, und wie sind da ggf. deine Erfahrungswerte?</em></p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/02/11/git-auf-der-command-line-cli/">Git auf der Command Line CLI einsetzen</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/02/11/git-auf-der-command-line-cli/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Git ignore file mode global oder lokal setzen?</title>
		<link>https://entwicklungshilfe.nrw/blog/2016/01/13/git-ignore-file-mode-global-lokal/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2016/01/13/git-ignore-file-mode-global-lokal/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Wed, 13 Jan 2016 12:00:32 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Entwicklertools]]></category>
		<category><![CDATA[Git]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=18</guid>

					<description><![CDATA[<p>Für die Arbeit mit der Versionsverwaltung Git müssen einige Einstellungen vorgenommen werden, damit diese effektiver eingesetzt werden kann. Manchmal ist es sinnvoll, diese global bzw. systemweit zu setzen. Etwa bei “Git ignore file mode”. Hier erfahrt ihr, wie das geht. Änderungen wie “Git ignore file mode” gehören dazu, da man diese Git-Einstellung nicht in jedem Projekt neu setzen muss. Es gibt mehrere [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/01/13/git-ignore-file-mode-global-lokal/">Git ignore file mode global oder lokal setzen?</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Für die Arbeit mit der Versionsverwaltung <a href="https://git-scm.com/" target="_blank" rel="noopener noreferrer">Git</a> müssen einige Einstellungen vorgenommen werden, damit diese effektiver eingesetzt werden kann. Manchmal ist es sinnvoll, diese global bzw. systemweit zu setzen. Etwa bei “Git ignore file mode”. Hier erfahrt ihr, wie das geht.</p>
<figure id="attachment_21" aria-describedby="caption-attachment-21" style="width: 300px" class="wp-caption alignleft"><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/Git-ignore-file-mode-1.jpg" rel="attachment wp-att-21"><img loading="lazy" decoding="async" class="wp-image-21 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/Git-ignore-file-mode-1-300x200.jpg" alt="Git ignore file mode" width="300" height="200" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/Git-ignore-file-mode-1-300x200.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/Git-ignore-file-mode-1-768x512.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/Git-ignore-file-mode-1-1024x683.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/Git-ignore-file-mode-1.jpg 1920w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/Git-ignore-file-mode-1-300x200@2x.jpg 600w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/Git-ignore-file-mode-1-768x512@2x.jpg 1536w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-21" class="wp-caption-text">Git ignore file mode</figcaption></figure>
<p>Änderungen wie “Git ignore file mode” gehören dazu, da man diese Git-Einstellung nicht in jedem Projekt neu setzen muss. Es gibt mehrere Anwendungsfälle, die wir auch in unseren <a href="http://www.entwicklungshilfe.nrw/seminare/git-flow-git-branching-model-fuer-agile-software-projekte/">Git-Schulungen</a> vorstellen werden. Es ist sinnvoll, die Einstellung global vorzunehmen – den Befehl sollte man aber dennoch auswendig kennen, falls man mal auf einem anderen System unterwegs ist.</p>
<h2>Git ignore file mode global setzen</h2>
<pre class="lang:default decode:true " title="Git ignore file mode global">git config --global core.filemode false</pre>
<p>Die oben abgebildete Zeile setzt durch den &#8211;global-Parameter die Einstellung global für den eingeloggten User. Das ist sehr praktisch, da die Einstellung in allen Projekten benötigt wird.</p>
<h2>Git ignore file mode lokal setzen</h2>
<pre class="lang:default decode:true " title="Git ignore file mode lokal">git -c core.filemode=false diff</pre>
<p>Neben der globalen Konfiguration ist es in Git natürlich auch möglich, die Einstellung nur für das aktuelle Projekt vorzunehmen. Der oben abgebildete CLI-Befehl setzt die Konfiguration nur für das aktuelle Projekt Verzeichnis.</p>
<h2>Git filemode</h2>
<p>Es kommt vor, dass durch Benutzerrechte Änderungen im lokalen Workspace entstehen und Git diese Änderungen als Change erkennt und committen möchte. Das ist zwar technisch richtig, häufig jedoch unerwünscht. Hierfür kann man ein Setting in der Git-Konfiguration setzen. Das lässt sich lokal oder global machen. Dessen sollte man sich immer bewusst sein und wissen, dass in Zukunft eventuell berechtigte Änderungen an den Zugriffsrechten nicht wirksam werden, wenn man das Setting global gesetzt hat. Für Änderungen in diesem seltenen Fall sollte man das Repo noch einmal explizit auschecken und die gewünschten Änderungen dort vornehmen und in das Remote Repository bringen. So spart man sich das lästige Hin- und Herkonfigurieren.</p>
<h2>Weiterführende PHP-Schulung zum Thema Git</h2>
<p>Wenn ihr euch gezielt zum Thema Git weiterbilden und viele praktische Tipps für eure Arbeit erhalten möchtet, könnte euch unsere entsprechende PHP-Schulung interessieren. <a href="http://www.entwicklungshilfe.nrw/seminare/git-flow-git-branching-model-fuer-agile-software-projekte/">Infos dazu findet ihr hier</a>. Insgesamt zielen die Seminare und Workshops von Entwicklungshilfe NRW – ebenso wie unser Blog – darauf ab, Webentwicklern die Arbeit zu erleichtern und dadurch für mehr Spaß und Motivation zu sorgen. Wenn ihr euch übrigens gerade fragt, wie ihr eure Vorgesetzten vom Nutzen einer Weiterbildung überzeugen könnt, dann hilft euch vielleicht <a href="http://www.entwicklungshilfe.nrw/blog/php-schulung-vorgesetzte-ueberzeugen/">dieser Beitrag hier</a> weiter.</p>
<p><em>Falls ihr noch Fragen zum Thema Git ignore file mode habt, dann könnt ihr diese gerne in den Kommentaren stellen. Wir werden euch so schnell wie möglich antworten.</em></p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2016/01/13/git-ignore-file-mode-global-lokal/">Git ignore file mode global oder lokal setzen?</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2016/01/13/git-ignore-file-mode-global-lokal/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ticketsystem mit Versionskontrolle</title>
		<link>https://entwicklungshilfe.nrw/blog/2015/12/29/ticketsystem-mit-versionskontrolle/</link>
					<comments>https://entwicklungshilfe.nrw/blog/2015/12/29/ticketsystem-mit-versionskontrolle/#respond</comments>
		
		<dc:creator><![CDATA[Andreas Mautz]]></dc:creator>
		<pubDate>Tue, 29 Dec 2015 12:22:16 +0000</pubDate>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Infrastruktur]]></category>
		<category><![CDATA[Ticketsystem]]></category>
		<category><![CDATA[Versionskontrolle]]></category>
		<guid isPermaLink="false">http://www.entwicklungshilfe.nrw/blog/?p=79</guid>

					<description><![CDATA[<p>Ein Ticketsystem mit Versionskontrolle ist eine geeignete Grundlage für Freelancer und kleine Agenturen, um Softwareentwicklungsprojekte zu managen. Zudem hilft eine Versionskontrolle wie git dabei, Änderungen am Code zu deployen. Redmine 3 mit Gitolite 3 installieren Eine gelungene, kostenfreie Kombination für ein Ticketsystem mit Versionskontrolle bieten Redmine als Ticketsystem und git als Versionskontrolle. Gitolite dient dabei als Mittler, um Nutzer des [&#8230;]</p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2015/12/29/ticketsystem-mit-versionskontrolle/">Ticketsystem mit Versionskontrolle</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Ein Ticketsystem mit Versionskontrolle ist eine geeignete Grundlage für Freelancer und kleine Agenturen, um Softwareentwicklungsprojekte zu managen. Zudem hilft eine Versionskontrolle wie git dabei, Änderungen am Code zu deployen.</p>
<p><a href="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955.jpg" rel="attachment wp-att-107"><img loading="lazy" decoding="async" class="wp-caption alignleft wp-image-107 size-medium" src="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955-300x197.jpg" alt="Ticketsystem mit Versionskontrolle" width="300" height="197" srcset="https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955-300x197.jpg 300w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955-768x504.jpg 768w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955-1024x672.jpg 1024w, https://entwicklungshilfe.nrw/wp-content/uploads/2015/12/23750809531_24c0a4b8e6_o-e1451303431955-214x140.jpg 214w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></p>
<h2>Redmine 3 mit Gitolite 3 installieren</h2>
<p>Eine gelungene, kostenfreie Kombination für ein Ticketsystem mit Versionskontrolle bieten <a href="http://www.redmine.org/" target="_blank" rel="noopener noreferrer">Redmine</a> als Ticketsystem und <a href="https://git-scm.com/" target="_blank" rel="noopener noreferrer">git</a> als Versionskontrolle. <a href="https://github.com/sitaramc/gitolite" target="_blank" rel="noopener noreferrer">Gitolite</a> dient dabei als Mittler, um Nutzer des Ticketsystems gegenüber dem eigenen Git-Server zu authentifizieren und so die Versionskontrolle über das Ticketsystem steuerbar zu machen. Mehr dazu gibt es im neuen Jahr in einem eigenen Blog-Beitrag, den ich dann hier verlinke.</p>
<h2>Voraussetzungen für die neue Infrastruktur</h2>
<p>Dieser Artikel ist eine Anleitung, wie man auf einem eigenen, dafür geeigneten Server diese Kombination aufsetzt.<br />
Ausgegangen wird hier von <a href="https://www.debian.org/" target="_blank" rel="noopener noreferrer">Debian</a> als Betriebssystem, und der eingeloggte User ist root. Es wird vorausgesetzt, dass man Pakete installieren und einen einfachen Editor wie vim oder nano benutzen kann.</p>
<p>Zunächst installiert man die grundlegenden Softwarepakete, die benötigt werden:</p>
<pre class="lang:default decode:true" title="benötigte Pakete für das Ticketsystem mit Versionskontrolle">apt-get install rubygems gitolite3 build-essential libssh2-1 libssh2-1-dev cmake libgpg-error-dev mysql apoache2
</pre>
<p>Anschließend werden dem System zwei User für git (&#8222;git&#8220;) und Redmine (&#8222;redmine&#8220;) hinzugefügt:</p>
<pre class="lang:default decode:true " title="User anlegen">adduser --system --shell /bin/bash --gecos 'Git Administrator' --group --disabled-password --home /opt/gitolite git
adduser --system --shell /bin/bash --gecos 'Redmine Administrator' --group --disabled-password --home /opt/redmine redmine
</pre>
<p>Da das Ticketsystem später die Kontrolle über die Versionskontrolle ausüben soll, legen wir einen SSH-Key für den User <em>redmine</em> an:</p>
<pre class="lang:default decode:true " title="redmine ssh-key">su redmine
ssh-keygen -t rsa -N '' -f ~/.ssh/redmine_gitolite_admin_id_rsa
exit
</pre>
<h2>Versionskontrolle kontrollieren</h2>
<p>Nun kann Gitolite mit</p>
<pre>dpkg-reconfigure gitolite3</pre>
<p>neu konfiguriert werden, da die Konfiguration bei Installation ein paar Settings anders setzt, als wir es gerne hätten. Die Parameter zur Konfiguration sind:<br />
user: git<br />
repos path: /opt/gitolite<br />
admin ssh-key: /opt/redmine/.ssh/redmine_gitolite_admin_id_rsa.pub</p>
<p>Redmine und Gitolite benötigen teilweise sudo-Rechte für den jeweilig anderen User, Redmine für die Installation temporär sogar darüber hinaus. Dazu konfigurieren wir unseren Server für das Ticketsystem mit Versionskontrolle mit</p>
<pre class="lang:default decode:true">visudo</pre>
<p>Folgendes wird zusätzlich eingetragen:</p>
<p># temp &#8211; *REMOVE* after installation<br />
redmine ALL=(ALL) NOPASSWD:ALL</p>
<p># redmine gitolite integration<br />
redmine ALL=(git) NOPASSWD:ALL<br />
git ALL=(redmine) NOPASSWD:ALL</p>
<h2>Installation des Ticketsystems Redmine</h2>
<p>Jetzt wird Redmine installiert. Dazu loggen wir uns als User <em>redmine</em> ein und wechseln in sein Home-Verzeichnis.</p>
<pre class="lang:default decode:true">sudo su - redmine
cd ~
</pre>
<p>Wir befinden uns jetzt in /opt/redmine, wo wir den aktuellen Code über github ziehen.</p>
<pre class="lang:default decode:true">git init
git remote add origin https://github.com/redmine/redmine.git
git fetch -p
</pre>
<p>Da wir uns im Home-Verzeichnis befinden, schließen wir noch ein paar Verzeichnisse und Dateien aus:</p>
<pre>vim .gitignore</pre>
<p>Auszuschließende Items sind zum Beispiel:<br />
.ssh/<br />
.bash_history</p>
<p>Als nächstes checken wir die aktuelle stabile Version aus.</p>
<pre class="lang:default decode:true">git add .gitignore
git commit -m 'local gitignore'
git checkout 3.1-stable
</pre>
<p>An dieser Stelle kann man jetzt noch die Quelle vom Original zu einer eigenen Quelle verschieben.</p>
<pre class="lang:default decode:true">git remote rm origin
git remote add origin __URL__
</pre>
<p>Wir benutzen Redmine mit einer MySQL-Datenbank. Sollte noch kein MySQL-Server installiert sein, bitte nachholen. Ansonsten mit</p>
<pre class="lang:default decode:true">mysql -u root -p -v -e "CREATE DATABASE redmine CHARACTER SET utf8; CREATE USER '__USER__'@'localhost' IDENTIFIED BY '__PASSWORD__'; GRANT ALL PRIVILEGES ON redmine.* TO '__USER__'@'localhost';"
</pre>
<p>__*__ bitte mit geeigneten Werten ersetzen.</p>
<p>Das oben erstellte Login verwenden wir nun zur Konfiguration von Redmine. Wir kopieren die Config-Templates und editieren diese:</p>
<pre class="lang:default decode:true">cd /opt/redmine/config
cp database.yml.example database.yml
cp configuration.yml.example configuration.yml
</pre>
<pre class="lang:default decode:true">vim database.yml
vim configuration.yml
</pre>
<p>Erweiterte Erläuterungen zur Konfiguration gibt es <a href="http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Step-3-Database-connection-configuration" target="_blank" rel="noopener noreferrer">hier für die Datenbank</a> und <a href="http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Configuration" target="_blank" rel="noopener noreferrer">hier für Generelles</a>.</p>
<p>Danach wechseln wir zurück ins Home-Verzeichnis und beginnen mit der Installation. Zur eigentlichen Installation von Redmine müssen wir im Gemfile noch eine Anpassung vornehmen.</p>
<pre class="lang:default decode:true">cd ~
sudo gem install bundler
nano Gemfile
</pre>
<p>Hier ändern wir die mysql2-Version auf 4.2.0, wenn man Percona als MySQL-Server in der Version 5.6 benutzen möchte.</p>
<p>Jetzt wird endlich installiert:</p>
<pre>bundle install --without development test postgresql sqlite
rake generate_secret_token
RAILS_ENV=production rake db:migrate
</pre>
<h2>Plugins für das Ticketsystem</h2>
<p>Nachdem Redmine grundlegend installiert wurde, kümmern wir uns jetzt um die Plugins:</p>
<pre class="lang:default decode:true">cd ~/plugins
git clone https://github.com/jbox-web/redmine_bootstrap_kit.git
git clone https://github.com/jbox-web/redmine_git_hosting.git
cd redmine_bootstrap_kit/
git checkout 0.2.4
cd ../redmine_git_hosting/
git checkout 1.2.0
cd ~
bundle install --without development test
bundle exec rake redmine:plugins:migrate RAILS_ENV=production NAME=redmine_git_hosting
</pre>
<p>Der eingangs erstellte SSH-Key wird jetzt in das Plugin verlinkt:</p>
<pre class="lang:default decode:true">ln -s /opt/redmine/.ssh/redmine_gitolite_admin_id_rsa /opt/redmine/plugins/redmine_git_hosting/ssh_keys/redmine_gitolite_admin_id_rsa
ln -s /opt/redmine/.ssh/redmine_gitolite_admin_id_rsa.pub /opt/redmine/plugins/redmine_git_hosting/ssh_keys/redmine_gitolite_admin_id_rsa.pub
</pre>
<h2>Das Ticketsystem mit Versionskontrolle überprüfen</h2>
<p>Wir wechseln jetzt auf die Seite des Users <em>git</em> und überprüfen Gitolite.</p>
<pre class="lang:default decode:true">sudo su - git
sed -i 's/$GL_GITCONFIG_KEYS = ""/$GL_GITCONFIG_KEYS = ".*"/g' /opt/gitolite/.gitolite.rc
exit
ssh -i .ssh/redmine_gitolite_admin_id_rsa git@localhost info
</pre>
<p>Dabei sollte eine Antwort ähnlich wie diese hier kommen:<br />
hello admin, this is git@__SERVER__ running gitolite3 3.6.1-2 (Debian) on git 2.1.4</p>
<p>R W gitolite-admin<br />
R W testing</p>
<p>Als letztes wird nun Redmine mittels des Passenger-Moduls zum Laufen gebracht. Es wird vorausgesetzt, dass ein entsprechender vhost-Eintrag existiert, der auf /opt/redmine/public verweist. Das Passenger-Modul installiert man mit</p>
<pre>passenger-install-apache2-module</pre>
<p>und trägt danach die in der Installation erzeugten Pfade in die apache-Konfiguration ein.</p>
<p><em>Bei mir hat diese Anleitung zum Aufsetzen eines Ticketsystems mit Versionskontrolle bisher immer sehr gut funktioniert. Wenn ihr Probleme habt, schreibt bitte in die Kommentare, damit diese Anleitung ständig verbessert werden kann. Gleichzeitig können wir durch den regen Ausstausch mit euch aber auch die Qualität unserer <a href="http://www.entwicklungshilfe.nrw/seminare/oh-my-zsh-mit-agnoster-theme/">PHP-Schulungen für Webentwickler</a> noch weiter erhöhen.</em></p>
<p><strong>Quellen und weiterführende Links:</strong><br />
<a href="https://github.com/redmine/redmine" target="_blank" rel="noopener noreferrer">Redmine</a><br />
<a href="http://gitolite.com/gitolite/install.html" target="_blank" rel="noopener noreferrer">Gitolite</a><br />
<a href="https://nsaunders.wordpress.com/2012/04/24/redmine-gitolite-integration/" target="_blank" rel="noopener noreferrer">Redmine und Gitolite</a><br />
<a href="https://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_2_integrated_with_Gitolite_2_on_Debian_Wheezy_with_Apache_and_Phusion_Passenger" target="_blank" rel="noopener noreferrer">Apache Passenger</a><br />
<a href="http://redmine-git-hosting.io/get_started/" target="_blank" rel="noopener noreferrer">Redmine git hosting</a><br />
<a href="https://www.redmine.org/plugins/redmine_git_hosting" target="_blank" rel="noopener noreferrer">Redmine git hosting Plugin-Seite</a></p>
<p>Der Beitrag <a href="https://entwicklungshilfe.nrw/blog/2015/12/29/ticketsystem-mit-versionskontrolle/">Ticketsystem mit Versionskontrolle</a> erschien zuerst auf <a href="https://entwicklungshilfe.nrw">Entwicklungshilfe NRW</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://entwicklungshilfe.nrw/blog/2015/12/29/ticketsystem-mit-versionskontrolle/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
