<?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>jakewalk:blog &#187; GIT</title>
	<atom:link href="http://www.jakewalk.de/tag/git/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jakewalk.de</link>
	<description></description>
	<lastBuildDate>Mon, 07 Jun 2010 11:54:34 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Mit GIT kollaborativ Software entwickeln</title>
		<link>http://www.jakewalk.de/2009/02/27/mit-git-kollaborativ-software-entwickeln/</link>
		<comments>http://www.jakewalk.de/2009/02/27/mit-git-kollaborativ-software-entwickeln/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 13:59:36 +0000</pubDate>
		<dc:creator>raphael</dc:creator>
				<category><![CDATA[Restlicher Kram]]></category>
		<category><![CDATA[GIT]]></category>
		<category><![CDATA[Repository]]></category>
		<category><![CDATA[unfuddle]]></category>
		<category><![CDATA[Versionsverwaltung]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.jakewalk.de/?p=339</guid>
		<description><![CDATA[<a href="http://www.jakewalk.de/2009/02/27/mit-git-kollaborativ-software-entwickeln/"><img align="left" hspace="5" width="150" src="http://www.jakewalk.de/wordpress/wp-content/uploads/2009/02/git_diff-300x169.png" class="alignleft wp-post-image tfe" alt="GIT - Ansicht der letzten Änderungen (Diff)" title="GIT - Ansicht der letzten Änderungen (Diff)" /></a>
Arbeitet man kollaborativ an Entwicklungsaufgaben (in meinem Fall PHP/MYSQL), ist das ohne eine Versionsverwaltung prinzipiell möglich, allerdings äußerst aufwendig und vor allem unproduktiv. Hat jemand eine Änderung an einer Datei vorgenommen, mailt er diese den anderen Mitgliedern zu, die fleißig die alte Datei durch die neue ersetzen. Hat man an dieser Stelle noch nicht die <a href="http://www.jakewalk.de/2009/02/27/mit-git-kollaborativ-software-entwickeln/" class="more-link">More &#62;</a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Arbeitet man kollaborativ an Entwicklungsaufgaben (in meinem Fall PHP/MYSQL), ist das ohne eine Versionsverwaltung prinzipiell möglich, allerdings äußerst aufwendig und vor allem unproduktiv. Hat jemand eine Änderung an einer Datei vorgenommen, mailt er diese den anderen Mitgliedern zu, die fleißig die alte Datei durch die neue ersetzen. Hat man an dieser Stelle noch nicht die Lust verloren, wird das spätestens dann geschehen, wenn parallel an derselben Datei gearbeitet wurde und man diese nun zusammenfügen darf. Für diese Probleme gibt es eine Versionsverwaltung (siehe auch <a href="http://de.wikipedia.org/wiki/Versionskontrollsystem">Versionskontrollsystem</a>). Dadurch können leicht und vollkommen automatisiert alle vorgenommenen Änderungen an einen Server geschickt werden (sog. &#8220;Push&#8221;), von dem man sich zu Beginn der Arbeit wieder mit den aktuellen Versionen der Dateien versorgen kann (sog. &#8220;Pull&#8221;).</p>
<p><a title="GIT - Ansicht der letzten Änderungen (Diff)" href="http://www.jakewalk.de/wordpress/wp-content/uploads/2009/02/git_diff.png"><img class="size-medium wp-image-363 alignleft" title="GIT - Ansicht der letzten Änderungen (Diff)" src="http://www.jakewalk.de/wordpress/wp-content/uploads/2009/02/git_diff-300x169.png" alt="GIT - Ansicht der letzten Änderungen (Diff)" width="176" height="99" /></a>Ich verwende hierfür <a href="http://git-scm.com/">GIT</a>, das in einigen riesigen Projekten erfolgreich verwendet wird (ich sage nur Linux Kernel, Google Android, Wine <a href="http://git.or.cz/gitwiki/GitProjects">und viele mehr</a>). Da mich die Installation und Konfiguration letztendlich doch einige Arbeit gekostet hat, dokumentiere ich hier mein Vorgehen unter Windows (Linuxuser bekommen das ganz sicher auch ohne meine Anleitung hin&#8230;)</p>
<p><span id="more-339"></span></p>
<h2>Installation des Windows-Clients</h2>
<p>Zuerst installiert man sich <a href="http://code.google.com/p/msysgit/">GIT für Windows</a> (ich habe die Version <a href="http://msysgit.googlecode.com/files/Git-1.6.1-preview20081227.exe">Git-1.6.1-preview20081227.exe </a>verwendet). Bei der Installation habe ich stur auf &#8220;Next&gt;&gt;&#8221; geklickt und überall die Standardwerte belassen (also Standardinstallationspfad, sowie <em>GIT Bash only</em> und <em>OpenSSH</em> verwenden) Dabei wird sowohl eine eigene Kommandozeile (Bash) installiert, als auch eine grafische Oberfläche (dazu später mehr). Nach der Installation startet man die GIT Bash (über das Windows-Startmenü).</p>
<h2>Erstellen eines SSH Schlüsselpaars</h2>
<p>Um das lokale Projekt mit dem Server zu synchronisieren, benötigt man ein SSH Schlüsselpaar zur verschlüsselten Synchronisierung. Hat man schon ein Schlüsselpaar, kann man diesen Punkt überspringen. Den Schlüssel legt man über die GIT Bash wie folgt an:</p>
<p><code>$ ssh-keygen -t rsa</code></p>
<p>Man wird nun nach einem Dateipfad gefragt und bestätigt den vorgegebenen Pfad mit Enter, und gibt ein gewünschtes Passwort (zweimal) ein. Die Datei <em>C:\Dokumente und Einstellungen\$Benutzername\.ssh\id_rsa.pub</em> öffnet man nun mit einem Texteditor und kopiert den kompletten Inhalt schonmal vorsorglich in die Zwischenablage (Strg+C).</p>
<h2>Account bei unfuddle anlegen</h2>
<p>Als nächstes legt man sich <a href="http://unfuddle.com/accounts/plans">einen Account bei unfuddle.com an</a>. Dieser Dienst bietet schon in der Grundversion viele nützliche Features, für die man bei ähnlichen Diensten wie dem Platzhirsch <a href="http://github.com">github.com</a> oder <a href="http://www.codebasehq.com/">codebase.com</a> kostenpflichtig upgraden muss. Leider ist man bei unfuddle in der Grundversion auf 1 Projekt beschränkt.<br />
Ist man anschließend eingeloggt, trägt man den aus dem vorangegangenen Schritt in die Zwischenablage kopierten Inhalt in den <em>Personal Settings</em> als <em>Public Key</em> ein.<br />
Als nächstes erstellt man in unfuddle ein Projekt <em>$Projektname</em>.</p>
<h2>Lokales Verzeichnis mit $Projektname synchronisieren</h2>
<p>Man kann nun ein beliebiges Verzeichnis auf dem lokalen Rechner mit dem Projekt $Projektname in unfuddle synchronisieren. Hierzu gibt man in der GIT Bash folgende Befehle der Reihe nach ein. Zuerst wechselt man in das gewünschte Verzeichnis:</p>
<p><code>$ cd /pfad/zum/verzeichnis</code></p>
<p>Ist das Projekt beispielsweise in <em>D:\Projekte\MeinProjekt</em> abgelegt, lautet der korrekte Befehl <em>cd /d/Projekte/MeinProjekt</em></p>
<p><code>$ git init</code></p>
<p>Hierdurch wird das Verzeichnis <em>D:\Projekte\MeinProjekt\.git </em>angelegt, das u.a. die Einstellungen und Änderungen für das Protokoll enthält.</p>
<p><code>$ git remote add unfuddle git@subdomain.unfuddle.com:subdomain/abbreviation.git</code></p>
<p>Hierbei muss subdomain durch den Benutzernamen und abbreviation durch den Projektnamen ersetzt werden. Die korrekten Daten findet man auch über das Dashboard von unfuddle (auf dem Repositories-Tab).</p>
<p><code>$ git config remote.unfuddle.push refs/heads/master:refs/heads/master</code></p>
<p>Legt wohl fest, welche Dateien gepusht werden sollen. (?)</p>
<p><code>git config core.autocrlf false</code></p>
<p>Diese Konfigurationseinstellung habe ich vorgenommen, da ich für jede Datei beim Push die Warnung <em>LF will be replaced by CRLF in </em> erhalten habe. Mit dieser Einstellung wird das automatische Umwandeln von Zeilenumbrüchen abgeschaltet.</p>
<p><code>$ git add *<br />
$ git commit -am 'initial commit'<br />
$ git push unfuddle master</code></p>
<p>Mit den ersten beiden Befehlen macht man das Verzeichnis mit dem Repository bekannt, erst der dritte Befehl führt den Push-Befehl tatsächlich aus:</p>
<p style="text-align: center;"><a title="GIT Kommandozeile" href="http://www.jakewalk.de/wordpress/wp-content/uploads/2009/02/git.png"><img class="size-medium wp-image-347  aligncenter" title="GIT Kommandozeile" src="http://www.jakewalk.de/wordpress/wp-content/uploads/2009/02/git-300x151.png" alt="GIT Kommandozeile" width="300" height="151" /></a></p>
<h2>Arbeiten mit dem Repository</h2>
<p>Über die folgenden Befehle kann man nun &#8220;pushen&#8221; oder &#8220;pullen&#8221;:</p>
<p><code>$ git push unfuddle master<br />
$ git pull unfuddle master</code></p>
<p>Wie ich am Anfang aber geschrieben habe, liegt dem Installationspaket auch eine grafische Benutzeroberfläche bei. Diese kann über den Punkt Git GUI im Startmenü gestartet werden. Dort kann über Neues Projektarchiv das verwendete Projektverzeichnis (oben war das <em>D:\Projekte\MeinProjekt</em>) hinzugefügt werden. Die Einstellungen werden dabei übernommen. Nun kann man über die Oberfläche das Repository verwalten:</p>
<p><a href="http://www.jakewalk.de/wordpress/wp-content/uploads/2009/02/gitgui_befehle.png"><img class="size-full wp-image-350 alignleft" title="Git GUI Befehle" src="http://www.jakewalk.de/wordpress/wp-content/uploads/2009/02/gitgui_befehle.png" alt="gitgui_befehle" width="112" height="128" /></a></p>
<p><em>Neu laden </em>- aktualisiert die lokalen Änderungen</p>
<p><em>Alle bereitstellen</em> &#8211; alle geänderten Dateien für den Upload ins Repository vorsehen</p>
<p><em>Eintragen</em> (=Push) &#8211; Bereitgestellte Dateien ins Repository übertragen</p>
<p><em>Versenden</em> &#8211; Erst durch das versenden, werden die obigen Funktion tatsächlich ausgelöst</p>
<p>In der GIT GUI kann man sich praktischerweise im Hauptmenü über <em>Projektarchiv/Desktop-Icon erstellen</em> eine Verknüpfung zum Repository auf den Desktop legen.</p>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.jakewalk.de/2009/02/27/mit-git-kollaborativ-software-entwickeln/feed/langswitch_lang/en/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
