Versionskontrolle redux

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Servus,

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 :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

Danke für die Einführung; ich setze mich derzeit mit Bazaar und Subversion (SourceForge und Launchpad :roll:) auseinander, aber nach dem, was du geschrieben hast, werde ich mir wohl Mercurial mal genauer ansehen ;)
An Bazaar finde ich die Einfachhheit ganz nett - man braucht wirklich nur ein Kommando, um einen Branch zu erstellen, bei Subversion braucht man ein bisschen länger (oder ich habs bisher immer falsch gemacht :lol:)

Frohes Fest,

Fred
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

fred.reichbier hat geschrieben:An Bazaar finde ich die Einfachhheit ganz nett - man braucht wirklich nur ein Kommando, um einen Branch zu erstellen, bei Subversion braucht man ein bisschen länger (oder ich habs bisher immer falsch gemacht :lol:)
An Bazaar finde ich es seltsam, dass normale Repositories nur einen Branch haben, d.h wenn ich gerne viele Branches habe, habe ich lauter Ordner in denen größtenteils das gleiche ist. Dann gibt es Shared Repositories, in denen mehrere Branches sein können, aber besonders initialisiert werden müssen. Beispielsweise in Git kann man einen Branch mit einem Befehl erzeugen und mit einem anderen dahin wechseln, ebenso wie eine Übersicht über vorhandene Branches bekommen. So machen sog. Feature-Branches meiner Meinung nach viel mehr Spaß. *)
In SVN ist das natürlich wieder so kompliziert, da man den Trunk von Hand an die richtige Stelle kopieren muss, was zwar eine "cheap copy" ist, aber man muss sich Gedanken machen wo man den Branch hinpflanzt.

Ich habe auch in den letzten Tagen mit dem Autor von Guilt, also dem ziemlich genauen Port vom Mercurials mq gesprochen, und der ist auch sehr aufgeschlossen was sein Programm und Verbesserungen dazu angeht. Insgesamt bin ich etwas erstaunt wie schnell sich alles um Git herum entwickelt. Ein Beispiel: ich habe vor einigen Tagen mit Git versucht ein Repository zu klonen, das Leer war. Es gab eine Erfolgsmeldung, aber kein geklontes Repository (schlau ist das nicht, aber ein Fehler sollte da trotzdem kommen). Bin dann in den Git-Channel gegangen um dort rumzumosern, warum da in einem sich so schnell entwickelnden Programm noch so dumme (aber triviale) Fehler drin sind - mir wurde erzählt, dass vor 1 Woche das Problem gelöst wurde und es bereits im nächsten Release repariert sein wird. Bei Git ist es daher gut, immer die aktuellste Version herzunehmen :/

*) Und das man während des Commits in Bazaar kein Diff machen kann ist einfach nur störend.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten