nachdem ich inzwischen für verschiedene Projekte vier verschiedene VCS einsetze (Subversion, Mercurial, Bazaar, Git) melde ich mich wieder zu Wort, was so den aktuellen Stand angeht.
Subversion wird inzwischen ziemlich gut von überall unterstützt ist aber nicht besonders schnell und mir inzwischen etwas zu langsam und teilweise sind einige Sachen auch schlicht zu umständlich. Die Idee Branches und Tags als Ordner darzustellen kam mir ursprünglich gut vor, aber ich finde es komplizierter als nötig zu verwenden. Die Idee von Repository-Versionen statt Datei-Versionen hingegen ist gut. Würde ich allen empfehlen, die bis auf Versionierung (mit zugegeben sehr guter Unterstützung von Tools) nichts besonderes benötigen - dafür ist es wunderbar simpel, weil es eben recht wenig kann. Verteilte Repositories gibt es hier mit SVK, aber es ist eben nur angetackert.
Damit wäre ich schon bei den verteilten Systemen, die muss ich jetzt zugeben, einfach mehr Spaß machen. Zuallererst nenne ich mal Bazaar, welches letztens Version 1.0 erreicht hat und was ich bisher am längsten nutze. Bazaar ist in Python geschrieben, von Canonical gepusht und.. traditionell langsam - wobei dort oft Performanceverbesserungen kommen. Man kann es ganz einfach als SVN-Ersatz verwenden, und es ist für simple Aufgaben auch ganz einfach und angenehm zu nutzen. Was mich an Bazaar stört ist die Komplikationen mit den verschiedenen Repository-Formaten und Branch-Möglichkeiten etc. Die Features die Bazaar hat sind an sich schon gut (zum Beispiel ist Bazaars Renaming das wohl beste was es momentan gibt, der Patch-Algorithmus soll auch gut sein), auch wenn ich zugeben muss dass ich damit anspruchsvollere Sachen nicht gemacht habe.
Git ist das Gegenteil von Bazaar: es ist wirklich schnell, und damit meine ich echt schnell und es hat einige nette Usability-Features wie Farben, Auto-Paging, angenehmes Branching und viele andere Sachen. Für die Verwaltung von Patches gibt es StGit oder Guilt, die ich aber bisher noch nicht ausprobiert habe. Git ist sehr unix-like, d.h. es besteht aus vielen Tools mit denen man größere Dinge bauen kann. Aber es ist von der Nutzung deutlich komplizierter als die anderen Systeme. Dafür hat es recht viel Dokumentation und eine sehr reaktive Usergemeinde im IRC, was das teilweise wieder ausgleicht.
Zuletzt möchte ich noch Mercurial erwähnen, was mir inzwischen auch sehr gut gefällt. Ich benutze es um Patches gegen Werkzeug zu machen, die man einfach automatisch per Mail verschicken kann und die dann direkt commited werden können. Mercurial hat dafür extra sogenannte Mercurial Queues (MQ, etwa das was Quilt und Guilt/StGit können), die recht angenehm zu nutzen sind. Die Integration in Trac ist auch recht brauchbar, die Dokumentation kann sich sehen lassen.
Wenn ich ein neues Projekt anfange würde ich wohl inzwischen entweder Git oder Mercurial nehmen. Bei Mercurial ist alles etwas übersichtlicher, nur muss man sich etwas einarbeiten was man machen muss um was zu erreichen (mein erster Ansatz zur Patchverwaltung war ein Fiasko). Gleiches gilt für Git, aber wenn man sich ein wenig einarbeitet kann man mit beiden Systemen ziemlich gute Ergebnisse erziehlen. Bazaar, obwohl es technisch nett ist würde ich wegen der Geschwindigkeit und der geringen Verbreitung wohl nicht mehr nehmen (es hat wie mir scheint auch keine Unterstützung zur Patch-Verwaltung, dort läuft das wohl über Feature-Branches).
Achja, es gibt auch ein Cheat Sheats für Mercurial und Git
