<?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>Der Interaktionsdesigner - PHP, jQuery und CSS &#187; Git</title>
	<atom:link href="http://www.interaktionsdesigner.de/category/git/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.interaktionsdesigner.de</link>
	<description>Pauls Blog beschäftigt sich mit Webentwicklungsthemen, im Focus stehen jQuery, TYPO3, CSS und PHP.</description>
	<lastBuildDate>Sat, 05 Jun 2010 21:13:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Das perfekte Zusammenspiel zwischen Git und CakePHP</title>
		<link>http://www.interaktionsdesigner.de/2010/06/05/das-perfekte-zusammenspiel-zwischen-git-und-cakephp/</link>
		<comments>http://www.interaktionsdesigner.de/2010/06/05/das-perfekte-zusammenspiel-zwischen-git-und-cakephp/#comments</comments>
		<pubDate>Sat, 05 Jun 2010 21:13:53 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://www.interaktionsdesigner.de/?p=706</guid>
		<description><![CDATA[Die großen Projekte entwickeln wir bei der Ape Unit GmbH im Moment mit Teams zwischen 3 und 5 Kollegen. Um sich nicht gegenseitig das Leben schwer zu machen, nutzen wir Git zur Codeverwaltung und CakePHP für anspruchsvolle Webapplikationen.
Mit ein paar Tricks und einer handvoll Wissen wir dieses Zusammenspiel ein Hort der Freude! Dieser Artikel beschreibt [...]]]></description>
			<content:encoded><![CDATA[<p>Die großen Projekte entwickeln wir bei der <a title="Webentwicklung und Medien aus Berlin" href="http://www.apeunit.com" target="_blank">Ape Unit GmbH</a> im Moment mit Teams zwischen 3 und 5 Kollegen. Um sich nicht gegenseitig das Leben schwer zu machen, nutzen wir <strong>Git</strong> zur Codeverwaltung und <strong>CakePHP</strong> für anspruchsvolle Webapplikationen.</p>
<p>Mit ein paar <strong>Tricks</strong> und einer handvoll Wissen wir dieses Zusammenspiel ein Hort der Freude! Dieser Artikel beschreibt das <strong>Zusammenspiel zwischen Versionsverwaltung und Framework</strong>.</p>
<p><span id="more-706"></span></p>
<h2>Das Repository</h2>
<p>Auf unserem Entwicklungsserver liegt das <strong>zentrale Coderepository</strong>. Hier wird es zum Projektstart angelegt und jeder beteiligte Entwickler kriegt bei bedarf Zugriff darauf. Zum starten wird nur eine leere Datei versionisiert, der Projektleiter legt dann alle benötigten Grundlagen von seinem Rechner aus an.</p>
<pre><code class=''># Auf dem Server<br />
$ mkdir PROJEKT.git<br />
$ cd PROJEKT.git<br />
$ touch init.txt<br />
$ git init<br />
$ git add .<br />
$ git commit -m "Init"</code></pre>
<p>Auf dem eigenen Rechner wird vom Projekt (eventuell per VPN von zuhause) eine Arbeitskopie erstellt.</p>
<pre><code class=''># Zuhause<br />
$ cd Ordner_fuer_alle_Projekte<br />
$ git clone gitosis@SERVER:git/PROJEKT.git</code></pre>
<p>Beim clonen legt git einen neuen Ordner mit dem Namen des Projektes an.</p>
<h2>CakePHP</h2>
<p>Im ersten Schritt werden alle Cake Dateien in den Ordner kopiert. Anschließend werden die benötigten Tabellen in der Datenbank angelegt. Über die<strong> Cake Console</strong> werden dann alle benötigten Dateien gebacken.</p>
<pre><code class=''>$ cd cake/console/<br />
$ ./cake bake</code></pre>
<p>Jetzt kommt der Trick! Um in Zukunft jeden Stress mit der Datenbank zu vermeiden,<strong> backt man das Datenbankschema mit in die Cake Applikation</strong>.</p>
<pre><code class=''>$ ./cake schema generate</code></pre>
<p>Mit diesem Befehl liest Cake die Datenbank aus und legt die Struktur in der PHP Datei unter <em>/config/schema/schema.php</em> ab. Ändert ein Entwickler eine Tabelle auf seinem Rechner, muss er das Schema neu erstellen und in Git bekannt machen.</p>
<pre><code class=''>$ ./cake schema generate<br />
$ cd ../..<br />
$ git add .<br />
$ git commit -m "Einiges ist passiert, inkl. neuer Datenbank"</code></pre>
<p>Der Kollege oder alternativ der gleiche Entwickler zuhause holt sich die neuste Version vom Server und aktualisert mit Cake Magie seine Datenbank.</p>
<pre><code class=''>$ git pull<br />
$ cd cake/console<br />
$ ./cake schema update</code></pre>
<p>Fertig ist die Datenbank!</p>
<h2>Dateien ignorieren</h2>
<p>Beim initialen anlegen macht es Sinn, <strong>Git einige Dateien und Ordner zu entziehen</strong>, die nicht versioniert werden müssen, da sie bei jedem Entwickler individuell vorhanden sind. Dafür legt man im Root Verzeichnis vom Projekt eine Datei Names<strong> .gitignore</strong> an.</p>
<p>Hier werden Dateien und Ordner festgehalten, die nicht eingebunden werden:</p>
<pre><code class=''>app/tmp/<br />
config/database.php</code></pre>
<h2>Cache Dateien anlegen</h2>
<p>Das Problem ist bei der oben verwendeten <strong>.gitignore </strong>Datei, dass die <strong>Caches leer sind und keine Zugriffsrechte</strong> darauf bestehen. Deshalb muss man beim erstellen des Projekts die nötigen Ordner anlegen und die entprechenden Zugriffsrechte vergeben.</p>
<pre><code class=''># cd app/<br />
# mkdir tmp<br />
# mkdir tmp/cache/<br />
# mkdir tmp/cache/models/<br />
# mkdir tmp/cache/persistent/<br />
# sudo chmod -R 777 tmp/</code></pre>
<p>Nach dem das Administratorpasswort eingegeben wurde, wird eine sehr freundliche Berechtigung gesetzt (die zum testen okay ist, auf dem Liveserver aber tabu!) und Cake kann in die Order schreibenn. Da der Ordner aus der Versionisierung ausgeschlossen wurde, muss man diesen Schritt zum Glück nur ein einziges mal durchführen.</p>
<h2>Die Datenbank</h2>
<p>Weil ein frisch geclontes Cake Projekt noch keine Datenbankverbindung besitzt, muss man als erstes eine neue Datenbank über phpMyAdmin o.ä. erstellen. Anschließend wechselt man in die Konsole und erstellt<strong> anhand des Schemas alle benötigten Tabellen</strong>.</p>
<pre><code class=''>$ cd cake/console<br />
$ ./cake bake</code></pre>
<p>Da keine Datenbankverbindung besteht, werden die Zugangsdaten abgefragt. Anschließend</p>
<pre><code class=''>$ ./cake schema create</code></pre>
<p>Jetzt noch die zwei Fragen mit <strong>y</strong> bestätigen und schon liegen alle Tabellen ordentlich in der frisch angelegten Datenbank.</p>
<h2>Fazit</h2>
<p>Was benutzt ihr um Demoinhalte zu übertragen? Im Schema gibt es zwei Callbacks: <strong>before() </strong>und <strong>after()</strong>; ich fürchte die werden beim neugenerieren überschrieben.</p>
<p>Ansonsten bleibt nur noch frohes Entwickeln zu wünschen übrig. <strong>Frohes entwickeln!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.interaktionsdesigner.de/2010/06/05/das-perfekte-zusammenspiel-zwischen-git-und-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ein sauberes Testsystem mit Git</title>
		<link>http://www.interaktionsdesigner.de/2009/08/31/ein-sauberes-testsystem-mit-git/</link>
		<comments>http://www.interaktionsdesigner.de/2009/08/31/ein-sauberes-testsystem-mit-git/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 15:15:04 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://www.interaktionsdesigner.de/?p=587</guid>
		<description><![CDATA[Versionisierung ist in aller Munde. Und am besten schmeckt Git. Ich hatte schon mal ein paar Worte über den Einstieg hier im Blog verloren, allerdings ist diese Softwareversionisierung schwierig in den Arbeitsalltag zu integrieren, wenn man nicht dazu gezwungen wird.
Super wichtig bleibt es natürlich auch, wenn man es nicht benutzt, deshalb möchte ich hier eine [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Versionisierung</strong> ist in aller Munde. Und am besten schmeckt <strong>Git</strong>. Ich hatte schon mal ein paar Worte über den Einstieg <a title="Pauls Git Tutorial" href="http://www.interaktionsdesigner.de/2009/05/25/mein-git-tutorial/" target="_blank">hier im Blog</a> verloren, allerdings ist diese Softwareversionisierung schwierig in den Arbeitsalltag zu integrieren, wenn man nicht dazu gezwungen wird.</p>
<p>Super wichtig bleibt es natürlich auch, wenn man es nicht benutzt, deshalb möchte ich hier eine Idee einbringen, um<strong> sich selbst zu zwingen</strong> damit zu arbeiten und sogar noch etwas davon zu haben!</p>
<p>Es geht um ein leeres Projekt (HTML, CSS, JavaScript) in dem neue Sachen schnell, lokal getestet werden können. Bisher hatte ich einfach eine <em>index.html</em> die ich alle paar Wochen gelöscht und neugeschrieben habe. <strong>Uncool</strong>!</p>
<p>Es geht viel <strong>besser</strong>, <strong>bequemer</strong> und <strong>zukunftsweisender</strong> mit Hilfe von <strong>Git</strong>! Und dieser Artikel zeigt eine Möglichkeit.</p>
<p><span id="more-587"></span></p>
<h2>Ein leeres Projekt</h2>
<p>Jeder Webentwickler wird wahrscheinlich seine eigenen Vorstellungen von einem leeren Projekt haben. Bei mir besteht es aus einer <em>index.html</em>, einem Ordner für <em>Javascript</em> und einem für <em>CSS</em>. Eine einfache <em>style.css</em> ist eingebunden und gibt dem ganzen ein nettes aussehen, ein paar <em>Listen</em> und <em>Divcontainer</em> und natürlich eine aktuelle <em>jQuery Version</em> sind eingebunden.</p>
<p>Testen, funktioniert, in einem Ordner zur Verfügung stellen (z.B. http://localhost/test/) und los gehts.</p>
<h2>Ein Git Projekt initialisieren</h2>
<p>Wie man <a title="Git installieren unter OSX" href="http://www.interaktionsdesigner.de/2009/05/25/mein-git-tutorial/" target="_self">Git unter OSX installiert</a>, habe ich schon beschrieben. Für Windows gibt es sicher die eine oder andere gute Anleitung im <a title="Git im Netz" href="http://www.google.de" target="_blank">Netz</a>. Durchhalten! Nach der Installation ist der Umgang mit Git kinderleicht.</p>
<p>Undzwar über das <strong>Terminal</strong>. Mit dem Befehl <em>cd</em> wechselt man in den Ordner in dem das Testprojekt liegt:</p>
<pre><code class=''>cd Projekte/test/</code></pre>
<p>Anschließend wird ein <strong>leeres Repositorie</strong> im Ordner erstellt, in dem man sich befindet:</p>
<pre><code class=''>git init</code></pre>
<p>Wenn das Projekt leer und gut aussieht, dann wird es als <strong>erste Version</strong> ins Repositorie geschrieben. Dazu reicht eine Zeile:</p>
<pre><code class=''>git commit -a -m "Das leere Testprojekt"</code></pre>
<p>Der Befehlt <em>commit</em> wird mit zwei Parametern aufgerufen: das <em>-a</em> zeigt an, dass alle Dateien und Ordner ins Repositorie aufgenommen werden sollen. Alternativ wäre die komplette Auswahl mit<em> git add .</em> oder statt dem Punkt einzelne Dateinamen.</p>
<p>Das <em>-m</em> und die folgende <em>"Nachricht"</em> wird zu dem Commit gespeichert und ist sehr praktisch.</p>
<p>Angucken, was im Repositorie gespeichert ist kann man sich auch ganz einfach:</p>
<pre><code class=''>git log</code></pre>
<h2>Sachen testen!</h2>
<p>Das war es fürs Erste. Ein guter Zeitpunkt den Feedreader zu starten, den Twitterstream durchzuschauen und eine interessante Technik zu entdecken, welche man gerne ausprobieren möchte. Zum Beispiel die großartigen, <a title="jQuery UI 1.8" href="http://blog.jqueryui.com/2009/08/jquery-ui-18a1/" target="_blank">neuen Module der neuen jQuery UI Version 1.8</a>.</p>
<p>Im Testprojekt können jetzt alle Dateien gelöscht, hinzugefügt und verändert werden. <strong>Dein Platz zum austoben!</strong></p>
<h2>Testergebnisse speichern</h2>
<p>Und jetzt wirds spaßig! Nehmen wir an, mitten im Testen der neuen Plugins kommt eine neue Twitternachricht an und verspricht eine  noch tollere Technik, die wir auch ausprobieren <strong>müssen</strong>.</p>
<p>Also wird ein neuer <strong>Ast</strong> (<em>Branch</em>) in Git angelegt, der die UI Tests beinhaltet:</p>
<pre><code class=''>git branch "jQueryUI"</code></pre>
<p>Wenn man den Namen weglässt (<em>git branch</em>) dann gibt git eine Übersicht über alle Branches aus. Der Branch der mit einem Sternchen gekennzeichnet ist, ist der in dem wir uns gerade befinden. Das sollte der neu angelegte sein.</p>
<p>Anschließend wird der aktuelle Zwischenstand ins Repositorie geschrieben:</p>
<pre><code class=''>git commit -a -m "jQuery UI 1.8 zickt noch ein bisschen rum"</code></pre>
<p>Gespeichert!</p>
<h2>Zurück zum leeren Testprojekt</h2>
<p>Hier wirds jetzt spannend!</p>
<pre><code class=''>git checkout master</code></pre>
<p>Mit diesem einfachen Befehl haben wir unser <strong>leeres Testprojekt zurück</strong>! Diese Anweisung überschreibt alle Daten in dem entsprechenden Verzeichnis. Möchte man die Ergebnisse behalten, sollte man diese in einem Branch speichern, damit der Master-Branch immer das leere Testprojekt enthält.</p>
<h2>Weiterentwicklen</h2>
<p>Das schöne ist, dass der Master sich weiterentwickeln kann. Soll jQuery UI also immer dabei sein (dann aber die stabile Version), dann muss sie nur im Testprojekt hinzugefügt werden und in Git bekannt gemacht werden (sofern wir uns im Master-Branch befinden):</p>
<pre><code class=''>git commit -a -m "Leeres Projekt mit jQuery UI"</code></pre>
<p>Damit verliert man den alten Stand des Testprojekts nicht! Wenn man die alte Version wieder braucht, holt man sich die mit Hilfe des Dachs <strong>^</strong> aus dem Repositorie zurück:</p>
<pre><code class=''>git checkout master^</code></pre>
<p>Die vorletzte Version gibts mit <em>master^^</em> usw.</p>
<h2>Fazit</h2>
<p>Softwareversionisierung ist eine großartige Sache und sich damit zu beschäftigen erleichtert nicht nur die einsame Arbeit am eigenen Computer, sondern ermöglicht überhaupt erst eine <strong>effektive Zusammenarbeit im Team</strong>.</p>
<p>Ich kann also nur jedem wärmstens empfehlen mit kleinen, lokalen Projekten zu beginnen und <strong>dran zu bleiben</strong>. Demnächst kommen hoffentlich die nächsten Anleitungen. Stoff genug gibts ja.</p>
<p>Bis dahin wünsche ich <em>frohes versionisieren</em>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.interaktionsdesigner.de/2009/08/31/ein-sauberes-testsystem-mit-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mein Git Tutorial</title>
		<link>http://www.interaktionsdesigner.de/2009/05/25/mein-git-tutorial/</link>
		<comments>http://www.interaktionsdesigner.de/2009/05/25/mein-git-tutorial/#comments</comments>
		<pubDate>Mon, 25 May 2009 13:44:54 +0000</pubDate>
		<dc:creator>Paul</dc:creator>
				<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://www.interaktionsdesigner.de/?p=467</guid>
		<description><![CDATA[Der letzte Schrei bei der Versionskontrolle ist Git. Entwickelt von Linus Torvalds, dem Erfinder von Linux, ermöglicht es das Arbeiten auf eine viel flexiblere Art und Weise als SVN. Die Punkte die mich überzeugt haben sind:

es muss sehr schnell sein, um mit der großen Code-Masse klarzukommen
nicht jeder darf Patches integrieren, sie müssen vorher durch einen [...]]]></description>
			<content:encoded><![CDATA[<p>Der letzte Schrei bei der Versionskontrolle ist <strong>Git</strong>. Entwickelt von Linus Torvalds, dem Erfinder von Linux, ermöglicht es das Arbeiten auf eine viel flexiblere Art und Weise als SVN. Die Punkte die mich überzeugt haben sind:</p>
<ul>
<li>es muss <strong>sehr schnell</strong> sein, um mit der großen Code-Masse klarzukommen</li>
<li>nicht jeder darf Patches integrieren, sie müssen vorher <strong>durch einen Maintainer kontrolliert</strong> werden</li>
<li>das System muss <strong>dezentral</strong> arbeiten, um einerseits Bandbreite und Performance zu sparen und damit andererseits nicht bei einem Ausfall die ganze Entwicklung still steht</li>
</ul>
<p>(Quelle: <a title="Git bei Online Tutorial" href="http://www.online-tutorials.net/programmierung/git/tutorials-t-3-263.html" target="_blank">Online-Tutorials.de</a>)</p>
<p>Nun stellt sich natürlich die Frage wie <strong>Git</strong> mit <strong>Mac OS X</strong> zusammenarbeitet, wie man es installiert und seine Projekte in ein Repository packt. Dieser Artikel will das verständlich, kurz und auf deutsch erklären.</p>
<p><span id="more-467"></span></p>
<h2>Mein Anforderungen</h2>
<p>Ich habe einen riesigen Haufen Projekte in einem riesigen Haufen Ordner. Jetzt liegt in einem Projektordner die Korrespondenz, angelieferte Daten und Informationen, sowie ein Ordner mit allen FTP Dateien die ich bearbeite, auf dem lokalen Server betrachte und bei bedarf komplett hochschiebe.</p>
<p>Auf meinem Rechner soll jetzt ein <strong>Git Repository</strong> entstehen um Änderungen nachvollziehen zu können, die Daten zu sichern und im Notfall alte Versionen wiederherstellen zu können.</p>
<h2>Git unter Mac OS X Leopard installieren</h2>
<p>Ehrlich gesagt bin ich kein Freund des Terminals, es macht zwar Spaß wenn man es kann, aber bis dahin ist es mühsam. Ich habe auch keine große Lust <em>XCode</em> zu installieren um <em>MacPorts</em> nutzen zu können um alles zu installieren, deshalb bin ich sehr froh einen <strong>automatischen Installer</strong> für OS X 10.5 gefunden zu haben. Also: <a title="Git Installieren ohne Terminal" href="http://code.google.com/p/git-osx-installer/" target="_blank">Git installieren wie ein ganz normales Programm</a>!</p>
<p>Funktioniert wunderbar. Um es zu testen muss man dann doch ins Terminal wechseln und den Befehl "<strong>git</strong>" eingeben. Darauf erhält man eine Liste der wichtigsten Befehle:</p>
<pre><code class='html'>The most commonly used git commands are:<br />
add        Add file contents to the index<br />
bisect     Find by binary search the change that introduced a bug<br />
branch     List, create, or delete branches<br />
checkout   Checkout a branch or paths to the working tree<br />
clone      Clone a repository into a new directory<br />
commit     Record changes to the repository<br />
diff       Show changes between commits, commit and working tree, etc<br />
fetch      Download objects and refs from another repository<br />
grep       Print lines matching a pattern<br />
init       Create an empty git repository or reinitialize an existing one<br />
log        Show commit logs<br />
merge      Join two or more development histories together<br />
mv         Move or rename a file, a directory, or a symlink<br />
pull       Fetch from and merge with another repository or a local branch<br />
push       Update remote refs along with associated objects<br />
rebase     Forward-port local commits to the updated upstream head<br />
reset      Reset current HEAD to the specified state<br />
rm         Remove files from the working tree and from the index<br />
show       Show various types of objects<br />
status     Show the working tree status<br />
tag        Create, list, delete or verify a tag object signed with GPG</p>
<p>See 'git help COMMAND' for more information on a specific command.</code></pre>
<p>Dieser Befehl <strong>git help COMMAND</strong> ist ganz praktisch. Navigieren lässt sich mit den Pfeiltasten, zurück zur Eingabe gelangt man mit [q].</p>
<h2>Mein erstes Git Repository</h2>
<p>Damit Git einen Namen und Benutzer hat, macht es Sinn sich dem System zu erkennen zu geben. Das passiert im Terminal mit Hilfe von</p>
<pre><code class='html'>git config --global user.name "Mein Name"<br />
git config --global user.email email@adresse.hier</code></pre>
<p>Für ein Projekt erstellt man jetzt ein Repository. Um nichts kaputt zu machen erstmal mit einem Testprojekt. Meins liegt in <em>/Projekte/Server/Git</em>. In diesen Ordner muss mit dem Befehl <strong>cd</strong> im Terminal gewechselt werden:</p>
<pre><code class='html'>cd /Projekte/Server/Git</code></pre>
<p>Wenn das geklappt hat (überprüfen mit dem Befehl <strong>ls</strong> - der zeigt alle Dateien die der Ordner beinhaltet), kommt der große Moment: Git wird initialisiert!</p>
<pre><code class='html'>git init</code></pre>
<p>Wie Sie sehen, sehen Sie nichts. Aber das trügt! Es wurde ein versteckter Ordner angelegt. Um die Inhalte anzusehen wird wieder in den Finder gewechselt, der entsprechende (leere) Ordner ausgewählt und mit der Tastenkombination [cmd] + [umschalt] + [g] der Dialog zum Ordner öffnen ausgewählt. Hier wird "<strong>.git</strong>" eingetragen, mit [enter] bestätigt und schon kann man sich die verteckten Inhalte ansehen.</p>
<h2>Dateien hinzufügen</h2>
<p>Um Dateien von Git verwalten zu lassen müssen sie als erstes in Git bekannt gemacht werden. Das ist der sogenannte "Index". Dateien fügt man diesem Index mit dem Befehl <strong>git add .</strong> hinzu. Der Punkt gibt an das alle Dateien in dem betreffenden Ordner hinzugefügt werden sollen.</p>
<p>Man befindet sich also im Terminal, immer noch im Projektordner, und fügt alle Dateien dem Index hinzu:</p>
<pre><code class='html'>git add .</code></pre>
<p>Als nächstes wird der Index ins Repository geladen. Das passiert über den Befehl <strong>commit</strong>.</p>
<pre><code class='html'>git commit</code></pre>
<p>Dieser Befehl öffnet einen Texteditor in dem man seinen Commit kurz beschreiben sollte (was ist passiert, was wurde geändert, usw.). Das geschieht über den Texteditor Vi. Für ungeübte "etwas" gewöhnungsbedürftig, aber so funktionierts:</p>
<ol>
<li>Über die Taste [i] den <strong>"Insert"-Modus</strong> starten und die Nachricht eingeben.</li>
<li>Mit [esc] den Modus wieder verlassen.</li>
<li>Den <strong>Befehlsmodus</strong> mit [:] (Doppelpunkt) starten, [wq] eingeben und mit [enter] bestätigen - das schreibt die Datei und beendet den Editor (w = write, q = quit).</li>
</ol>
<p>Das war ein bisschen anstrengend, aber man gewöhnt sich dran. Git müsste jetzt eine Meldung anzeigen das alles geklappt hat, wieviele Dateien aufgenommen wurden usw.</p>
<h2>Weitere Dateien hinzufügen</h2>
<p>Im Repository ist jetzt also eine Kopie vom gesamten Projekt gespeichert. Jetzt beginnt der Arbeitstag und man macht großartige Dinge. Wenn man das Gefühl hat den aktuellen Zwischenstand speichern zu wollen, wechselt man wieder ins Terminal, in den entsprechenden Ordner und "commited" die gemachten Änderungen.</p>
<pre><code class='html'>git commit -a</code></pre>
<p>Das<strong> -a</strong> am Ende fügt alle Dateien automatisch dem Index hinzu und publiziert die Änderungen.</p>
<h2>Änderungen betrachten und wiederherstellen</h2>
<p>Zu jedem Zeitpunkt kann man sich über <strong>git log</strong> den Status des Repositorys ansehen. Das listet alle Commits auf. Um genau zu sehen was sich geändert hat, wird der Befehl mit dem Parameter <strong>-p</strong> erweitert:</p>
<pre><code class='html'>git log -p</code></pre>
<p>An den Plus- und Minuszeichen kann man jetzt erkennen welche Zeilen geändert und welche hinzugefügt wurden. Über [q] verlässt man den Quelltextmodus.</p>
<p>Und jetzt wird es richtig spannend. Wenn eine Änderung nicht gelappt hat und die letzte Version wiederhergestellt werden soll, dann passiert das mit <strong>checkout</strong>.</p>
<pre><code class='html'>git checkout master^</code></pre>
<p><strong>master</strong> gibt den sog. "Branch" / Ast an aus dem exportiert werden soll, "master" ist der Standardast der automatisch angelegt wird. Das Dach <strong>^</strong> gibt an das die letzte Version wiederhergestellt wird. Zwei Dächer (^^) zeigen dann auf die vorletzte usw.</p>
<p>Wird dieser Befehl ausgeführt werden alle Dateien im Ordner durch jene aus dem Repository ersetzt. Um wieder die aktuellste Version zu erhalten führt man den gleichen Befehl aus, allerdings ohne das Dach.</p>
<h2>Fazit und Ausblick</h2>
<p>Vielleicht klingt es für dein einen oder anderen nicht besonders Revolutionär und ehr unpraktisch mit dem Terminal usw., ich empfehle aber <strong>dringend</strong> sich damit auseinander zu setzen!</p>
<p>Die hier vorgestellten Grundlagen sind nur die <strong>Spitze des Eisbergs</strong>, Git bietet unglaublich viele Möglichkeiten, insbesondere bei der Zusammenarbeit mit anderen Programmierern. Es lassen sich verschiedene Versionen und Zweige definieren und richtig mächtig wird es wenn auf dem Server ein eigenes Repository läuft, als Backup und zur direkten Veröffentlichung.</p>
<p>Es lassen sich auch verschiedene Hooks einbauen, kleine Scripte die z.B. ein Copyright in die Datei einfügen oder Bedingungen prüfen, beim einchecken und auschecken uvm.</p>
<p>Das <strong>nächste Tutorial</strong> folgt dann hier im Blog. Wer es nicht mehr aushält, dem sein folgende Links ans Herz gelegt.</p>
<h2>Weiterlesen</h2>
<ul>
<li>Ein guter Einstieg auf Deutsch bei den <a title="Online Tutorial Git" href="http://www.online-tutorials.net/programmierung/git/tutorials-t-3-263.html" target="_blank">Online-Tutorials</a>.</li>
<li>Das "offizielle" <a title="Getting Started with Git" href="http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html" target="_blank">Getting Started Tutorial</a> von den Machern (en).</li>
<li>"<a title="A web-focused Git Workflow" href="http://joemaller.com/2008/11/25/a-web-focused-git-workflow/" target="_blank">A web-focused Git Workflow</a>" von Joe Maller (en).</li>
<li>Sehr <a title="Alles über Git" href="http://www-cs-students.stanford.edu/~blynn/gitmagic/index.html" target="_blank">ausführliche Anleitung</a> inkl. Tipps und Tricks (en).</li>
<li><a title="Every Day Git" href="http://www.kernel.org/pub/software/scm/git/docs/everyday.html" target="_blank">Every Day Git</a> beschreibt wichtige Arbeitsabläufe (en).</li>
<li>Und natürlich die <a title="Offizielle Git Homepage" href="http://git-scm.com/" target="_blank">offizielle Git Homepage</a> (en).</li>
<li>Zweiter Arikel über Git in Pauls Blog: <a title="Pauls Blog mag Git" href="http://www.interaktionsdesigner.de/2009/08/31/ein-sauberes-testsystem-mit-git/" target="_self">Ein sauberes Testprojekt mit Git</a>.</li>
</ul>
<p>Wie gesagt, hier im Blog geht es demnächst auch weiter. Über <strong>Hinweise</strong> und <strong>Korrekturen</strong> freue ich mich natürlich sehr, dass war mein erstes mal mit <strong>Git</strong>. Aber ich denke wir werden eine tolle Zeit miteinander haben und irgendwann mehr als Freunde sein!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.interaktionsdesigner.de/2009/05/25/mein-git-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
