blog · git · desktop · images · contact & privacy · gopher


Versionskontrolle – die Zweite

Nachdem ich jetzt längere Zeit Bazaar (erfolgreich) im Einsatz hatte und die Konzepte ein bisschen besser verinnerlicht habe als beim letzten Posting zu diesem Thema, wollte ich's nochmal mit Git probieren. Hauptgrund dafür war das Chaos Seminar zu Git, was dann auch endlich mal ein paar Groschen zum Fallen brachte. ;) Imo Pflichtlektüre für jeden, der sich für das Thema interessiert (und nicht eh schon alles weiß :D).

Mal nacheinander die Kritikpunkte, die mir beim letzten Mal aufgefallen sind:

"Mehrere Branches pro Verzeichnis, aber nur einer wird bei einem 'push' veröffentlicht."

Eigentlich hängt das stark mit dem letzten Punkt zusammen, aber auch damit, dass mir das Konzept noch nicht 100%ig klar war. Die "logischen Arbeitseinheiten" sind Branches und keine Repositories, das war wohl mein Denkfehler (liegt das aber so fern, wenn man vorher nur SVN kannte? :))

"Unübersichtlicher Log-Output."

Mit der Default-Konfiguration auf Shell-Ebene ist das sicherlich wahr. Aber es gibt bei "git log" ja einerseits den Parameter "--graph" und andererseits Aliases für die ~/.gitconfig, damit man sich das auch schneller zugänglich machen kann - weiterhin kann man den Output einfärben. Ganz davon abgesehen, dass mit "gitk" ein graphisches Tool zur Verfügung steht, das Bazaar alt aussehen lässt - denn das dortige "bzr-gtk" lief nicht wirklich rund und zudem langsam, drum ließ ich es liegen :mhf:. Das Plugin "graph-ancestry" für Bazaar ist zwar ganz nett, für einen schnellen Überblick, wie "gitk" ihn bieten kann, aber völlig ungeeignet.

"Kein SFTP-Support."

Dazu habe ich immernoch nichts besseres gefunden, da bleibt Bazaar mit nativem SFTP-Support ungeschlagen. Wenn es hart auf hart kommt, könnte vielleicht ein Blick zu GitHub lohnenswert sein, mal sehen.

Mit SSHFS hält es sich aber auch so in Grenzen:

#!/bin/bash

# Settings
LDIR=~/tmp/ssh-git
REPONAME=$(basename $PWD).git
REPODIR=$LDIR/$REPONAME

HOST=www.example.org
PUBDIR=git
SSHUSER=naichbins

REMOTEMOUNT=/srv/www/accounts/ichbins/

# Emergency
function die()
{
    echo "Fail." >&2
    exit 1
}

# Create directory if not yet existing
if [[ ! -d $LDIR ]]
then
    mkdir -p $LDIR
fi

# Decide what to do
case $1 in
    push)
        git push --thin --tags $REPODIR master || die
        cd $REPODIR || die
        git --bare update-server-info || die

        echo -e "Done:\n\tgit clone http://$HOST/$PUBDIR/$REPONAME"
    ;;

    init)
        if [[ ! -d $REPODIR ]]
        then
            mkdir $REPODIR || die
        fi
        cd $REPODIR || die

        git --bare init || die
    ;;

    umount)
        fusermount -u $LDIR
    ;;

    mount | *)
        sshfs -o workaround=rename,uid=1000,gid=100 $SSHUSER@$HOST:$REMOTEMOUNT $LDIR
    ;;
esac

"Git ist nicht straightforward."

Git ist nicht straightforward. Aber es ist verdammt flexibel. Und wie oft passiert es, dass man irgendwas commited o.ä. und sich hinterher denkt, "das war ja jetzt Bockmist" (schon allein das berühmte "Pfeiltaste hoch, Enter - ups, das war ja 'bzr ci ...'"). Bei Bazaar musste ich es halt hinnehmen (oder habe die richtige Lösung nicht gefunden / lange genug gesucht...), aber Git kann eben quasi alles. Man muss es nur mal halbwegs verstanden haben, aber dafür gibt es ja obiges Video. ;)

Zuguterletzt wurde Bazaar nach einiger Zeit ziemlich langsam... :(

– Nachtrag: Nur, damit ich's nicht vergesse, hier eine Idee, wie man von Bazaar nach Git migrieren kann.

– Nachtrag 2: Parameter "--thin" und "--tags" beim Pushen.

– Nachtrag 3: Aktuellere Anleitung für die Migration von bzr zu git.