Konfigurationen synchronisieren und verwalten mit git
German, Howto, gentoo August 28th, 2007Wir sind gerade dabei, auf unserer wootstube eine Versionskontrolle mit git einzurichten. Eigentlich wollten wir ja Subversion einsetzen und eigentlich ist das ja für unsere Entwicklungsprojekte gedacht. Aber weil der Linus sagt, dass Subversion scheisse und git so viel toller ist habe ich es mir einfach mal angeschaut und bin dabei auf einen ganz netten Nebeneffekt gestossen: die Möglichkeit, Konfigurationen über meine Boxen ohne viel Aufwand zu synchronisieren. So habe ich jetzt zum Beispiel auf Server, Workstation und Notebook immer dieselben Configs.
Ich versuche das im Folgenden ein wenig zu dokumentieren. Dieser Walkthrough eignet sich nämlich prima, um die ersten Umgangsformen von git zu verstehen. Übrigens, ich arbeite hauptsächlich mit gentoo. Auf debian heisst das git Paket git-core und die apache vhosts organisiert sowieso jeder auf seine eigene Art & Weise. Der Rest sollte ziemlich gleich sein.
SERVER-SIDE [+]
# git und gitweb für die Weboberfläche installieren USE="-vhosts" emerge -av dev-utils/git gitweb # ins Verzeichnis der apache vhosts wechseln cd /etc/apache2/vhosts.d/ # neue vhost anlegen cat > git.conf << EOF <VirtualHost DEINE_IP:80> ServerName git.DEINE_DOMAIN.de DocumentRoot /var/www/localhost/htdocs/gitweb/ RewriteEngine on RewriteRule ^/(.*\.git/(?!/?(info|objects|refs)).*)?$ \ /cgi-bin/gitweb.cgi%{REQUEST_URI} [L,PT] SetEnv GITWEB_CONFIG /etc/gitweb.conf <Directory '/var/www/localhost/htdocs/gitweb/'> Options FollowSymLinks -SymLinksIfOwnerMatch Indexes +MultiViews Order allow,deny Allow from all AllowOverride None </Directory> </VirtualHost> EOF # in Standard cgi Verzeichnis springen cd /var/www/localhost/cgi-bin # symlink für gitweb script anlegen (damit es durch portage aktualisiert werden kann) ln -s ../htdocs/gitweb.cgi # neue vhost laden /etc/apache2 reload # Verzeichnisse für git und User Verzeichnis anlegen mkdir -p /var/git/jesse # User Berechtigungen geben chown -R jesse.users /var/git/jesse # Von jetzt an machen wir als User weiter su jesse # Wir stellen uns git vor (sind ja höflich) git config --global user.name "jesse keys" git config --global user.email jesse@teranetworks.de" # Wir springen in unser Verzeichnis cd /var/git/jesse # Und initialisieren darin unser Repository git init # Jetzt können wir auch schon mit ner dummy Datei testen: echo "bar" > foo # git tracks content, not files: jede zu verfolgende Datei muss git erst # gezeigt werden (alternativ mit "git add ." alle Dateien im Verzeichnis) git add foo # Neue Datei mit Kommentar ins Repository übertragen git commit -a -m "inital commit for my repo"
CLIENT-SIDE [+]
# Wir brauchen das git Paket natürlich auch emerge -av dev-utils/git # Danach arbeiten als User su jesse cd ~ # Wir stellen uns git vor git config --global user.email "jesse@teranetworks.de" git config --global user.name "jesse keys" # Jetzt wirds interessant: wir holen uns das Repository vom Server # und packen es in ~/myrepo git clone git+ssh://geekosphere.org/var/git/jesse myrepo cd myrepo # Wir legen eine Testdatei an echo "bar" >> foo commit -a -m "woot, i changed it" # Und schicken sie wieder zurück ins Repository git push # Das wars schon mit dem rudimentären git Zauber! # Wenn wir die *Dateien* auf dem Server aktualisieren wollen müssen wir # dort übrigens ein "git checkout -f" in /var/git/jesse ausführen # Anhand der .zshrc zeige ich jetzt, wie man damit die Configs verwaltet: # Wir gehen ins Home Verzeichnis cd ~ # Verschieben die zshrc in das Repo mv .zshrc myrepo/ # Und legen einen Symlink ln -s myrepo/.zshrc # Nicht vergessen, git die neue Datei vorzustellen cd myrepo git add .zshrc # Brav committen git commit -a -m "yay, teh zshrc" # Und ab damit auf den Server git push # Haben wir von einem anderen PC aus Änderungen durchgeführt # aktualisieren wir unsere lokale Kopie: git pull
Eigentlich recht simpel, meiner Meinung nach aber echt genial. Hast Du toll gemacht, lieber Linus :)
Und hier findet ihr noch ein paar zusammengetragene Links zu Dokumentationen und Tutorials. Viel Spass!





