<?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>ComSubVies Creative Content &#187; Git</title>
	<atom:link href="http://blog.ocrs.at/tag/git/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ocrs.at</link>
	<description></description>
	<lastBuildDate>Wed, 17 Mar 2010 12:23:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Installation eines Git-Hosts</title>
		<link>http://blog.ocrs.at/2010/01/24/installation-eines-git-hosts/</link>
		<comments>http://blog.ocrs.at/2010/01/24/installation-eines-git-hosts/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 18:27:32 +0000</pubDate>
		<dc:creator>Markus Schabel</dc:creator>
				<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Versionskontrolle]]></category>

		<guid isPermaLink="false">http://blog.ocrs.at/?p=937</guid>
		<description><![CDATA[Eine Kurzanleitung zur Installation und Konfiguration eines Git-Servers mittels des Tools gitosis, sowie ein kleines Beispiel wie ein lokales Verzeichnis in ein remote Repository übertragen werden kann.]]></description>
			<content:encoded><![CDATA[<p>Nachdem ich derzeit ohnehin keinen vernünftigen privaten Software-Development Server habe, und es dann doch schön langsam an der Zeit ist, die diversen Projekte wieder mal unter eine Versionskontrolle zu stellen (TimeMachine Backups sind zwar durchaus sicher, einfach und zuverlässig, aber eben nur Backups), habe ich beschlossen diesmal auf git zu setzen &#8211; nachdem ich ja in den Jahren zuvor meistens mit CVS bzw. vereinzelt mit SVN gefahren bin, wollte ich mal was neues probieren&#8230;</p>
<p>Um Git Repositories vernünftig hosten zu können gibt es das Tool <code class="codecolorer text default"><span class="text">gitosis</span></code>, welches bereits als Debian-Paket verfügbar und somit leicht zu installieren ist:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$apt-get install gitosis</div></div>
<p>Im Anschluss muss man gitosis mit einem SSH public key initialisieren, damit man sich ohne Passwort mit dem gitosis Repository (welches zur Konfiguration verwendet wird) verbinden kann. Eine entsprechenden Schlüssel kann man mit <code class="codecolorer text default"><span class="text">ssh-keygen</span></code> erzeugen:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$ssh-keygen -t rsa</div></div>
<p>Diesen Schlüssel muss man jetzt für gitosis aktivieren:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$sudo -H -u gitosis gitosis-init &lt; ~/.ssh/id_rsa.pub</div></div>
<p><code class="codecolorer text default"><span class="text">gitosis</span></code> verfügt über ein eigenes Konfigurations-Repository über das es konfiguriert werden kann. Dieses lässt sich wie folgt auschecken:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$git clone gitosis@localhost:gitosis-admin.git</div></div>
<p>Dieser Befehl checkt das Repository aus und speichert es im aktuellen Pfad im Verzeichnis <code class="codecolorer text default"><span class="text">gitosis-admin</span></code>. In diesem befindet sich einerseits eine Konfigurationsdatei <code class="codecolorer text default"><span class="text">gitosis.conf</span></code>, sowie zusätzlich ein Verzeichnis <code class="codecolorer text default"><span class="text">keydir</span></code>, in dem die SSH public keys der Benutzer gespeichert werden.</p>
<p>In der Konfigurationsdatei <code class="codecolorer text default"><span class="text">gitosis.conf</span></code> gibt es Blöcke für Benutzergruppen und Repositories. Ich lege daher einfach einmal eine Gruppe für Entwickler an (wo allerdings momentan nur ich Mitglied bin). Außerdem sage ich, dass diese Gruppe mit dem Repository <code class="codecolorer text default"><span class="text">diplomarbeit</span></code> (vielleicht sollte ich mehr Leute in diese Gruppe schreiben, vielleicht findet sich ja ein Depp der mir die Arbeit abnimmt) arbeiten darf.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">[group developers]<br />
members = markus<br />
writable = diplomarbeit</div></div>
<p>Die geänderte Konfiguration kann mittels der folgenden Befehle aktiviert werden:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$git commit -a -m &quot;Created group developers with access to repository diplomarbeit&quot;<br />
$git push</div></div>
<p>Der erste Befehl speichert dabei die Änderungen in der lokalen Kopie des Repositorys, während mit <code class="codecolorer text default"><span class="text">git push</span></code> die Änderungen auf das Remote-Repository übertragen werden.</p>
<p>Die Diplomarbeit lässt sich jetzt in das Repository einchecken (dazu muss zuerst in das entsprechende Verzeichnis gewechselt werden):</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$git init<br />
$git remote add origin gitosis@SERVER:diplomarbeit.git</div></div>
<p>Mit <code class="codecolorer text default"><span class="text">git init</span></code> wird dabei ein lokales git Repository angelegt (d.h. das Verzeichnis <code class="codecolorer text default"><span class="text">.git</span></code> wird erstellt), mit <code class="codecolorer text default"><span class="text">git remote add</span></code> wird ein neues Ziel <code class="codecolorer text default"><span class="text">origin</span></code> angelegt, welches der angegebenen URL entspricht). Anschließend können die lokalen Dateien für die Versionskontrolle aktiviert werden (<code class="codecolorer text default"><span class="text">git add</span></code> teilt <code class="codecolorer text default"><span class="text">git</span></code> mit, das diese Dateien ab sofort unter Versionskontrolle sein sollen):</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$git add .</div></div>
<p>Die Änderungen (d.h. das Hinzufügen der Dateien) muss nun noch bestätigt werden, wobei hier zusätzlich ein entsprechender Kommentar angegeben werden sollte, der die Änderungen beschreibt:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$git commit -m &quot;Initial import&quot;</div></div>
<p>Das Repository muss nun auch auf den Server gepusht werden. Hierbei werden die Änderungen an das Ziel <code class="codecolorer text default"><span class="text">origin</span></code> (welches zuvor mit <code class="codecolorer text default"><span class="text">git remote add</span></code> konfiguriert wurde) übertragen. Diese werden dabei in die lokale Branch <code class="codecolorer text default"><span class="text">master</span></code> als remote Branch <code class="codecolorer text default"><span class="text">heads/master</span></code> gespeichert werden soll:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$git push origin master:refs/heads/master</div></div>
<p>Die Repositories werden auf dem Server dabei im Verzeichnis <code class="codecolorer text default"><span class="text">/srv/gitosis/repositories/</span></code> gespeichert, welches natürlich entsprechend in die Backups aufgenommen werden sollte.</p>
<!-- PHP 5.x -->]]></content:encoded>
			<wfw:commentRss>http://blog.ocrs.at/2010/01/24/installation-eines-git-hosts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

