Einen guten Vergleich zwischen ClearCase und Git finden Sie in meiner SO-Antwort:
" Was sind die grundlegenden ClearCase-Konzepte, die jeder Entwickler kennen sollte? ", Die einige wesentliche Unterschiede (und einige Mängel von ClearCase) veranschaulichen.
Dateizentrische Operationen
Das wichtigste Manko von ClearCase ist der alte " dateizentrische " Ansatz (im Gegensatz zu " repository -zentriert " wie in SVN oder Git oder Perforce ...).
Das bedeutet, dass jedes Auschecken oder Einchecken Datei für Datei erfolgt. Die Atomizität des Betriebs liegt auf Dateiebene.
Kombinieren Sie dies mit einem sehr ausführlichen Protokoll und einem Netzwerk mit möglicherweise mehreren Knoten zwischen der Entwickler-Workstation und dem VOB-Server, und Sie können einen ziemlich langsamen und ineffizienten Dateiserver erhalten (der im Kern ClearCase ist).
Datei-für-Datei-Operationen bedeuten: langsame rekursive Operationen (wie rekursives Auschecken oder rekursives "Hinzufügen zur Quellcodeverwaltung" , auch von clearfsimport
).
Ein schnelles LAN ist obligatorisch, um die Nebenwirkungen dieses gesprächigen Protokolls zu mildern.
Zentralisiertes VCS
Der andere zu berücksichtigende Aspekt ist der zentralisierte Aspekt (obwohl er mit seiner replizierten VOB-Funktion für mehrere Standorte "verteilt" werden kann).
Wenn das Netzwerk keinen Zugriff auf die VOBs zulässt, können die Entwickler:
- funktionieren immer noch in Snapshot-Ansichten (jedoch nur mit entführten Dateien)
- Warten Sie auf die Wiederherstellung des Netzwerks, wenn dynamische Ansichten verwendet werden
Teure verteilte VCS-Option
Sie können eine verteilte VCS-Funktion verwenden, indem Sie einen Vob replizieren.
Aber:
- Sie benötigen eine spezielle Lizenz, um darauf zugreifen zu können.
- Diese Lizenz ist teuer und erhöht die Kosten der regulären Lizenz
- Jeder vob, der den replizierten vob verwendet (admin vob, admin pvob, ...), muss ebenfalls repliziert werden (dh einige Projekte, die nicht direkt mit einer verteilten Entwicklung befasst sind, müssen weiterhin eine Lizenz für mehrere Standorte zahlen ...)
Alte und nicht benutzerfreundliche GUI
- Die GUI ist sehr altmodisch und unpraktisch (MFC-Look Mitte der 90er Jahre, vollständig synchrone GUI, dh Sie müssen auf eine Aktualisierung warten, bevor Sie auf eine andere Stelle klicken): Wenn Sie Baselines durchsuchen, können Sie nicht schnell nach einer bestimmten suchen.
- Die GUI unter Unix ist nicht genau die gleiche wie unter Windows (die neueste Version 7.1 ist besser, aber noch nicht da).
- Der Installationsprozess ist ziemlich kompliziert (obwohl der neueste von CC7.1 eingeführte Installer Manager jetzt eine kohärente GUI unter Windows oder Unix ist und das Verfahren vereinfacht).
- Die einzige wirklich umfangreiche Anwendung wurde nur für CCRC (den Remote-Client) entwickelt.
UCM-Inkonsistenzen und in Kohärenz
Wie unter " So nutzen Sie die Funktionen von ClearCase " erwähnt, sind dynamische Ansichten großartig (eine Möglichkeit, Daten über das Netzwerk anzuzeigen, ohne sie auf die Festplatte kopieren zu müssen), aber die Hauptfunktion bleibt UCM : Sie kann eine echte Bereicherung sein, wenn Sie dies haben großes Projekt mit komplexem Workflow.
Einige Mängel an dieser Front:
- Die Abhängigkeiten zwischen Komponenten werden für eine Tiefe, die einer überlegen ist, nicht gut verwaltet (aufgrund des Fehlers der " Parasiten-Grundlinie ").
- UCM weist immer noch einige Kohärenzen und Inkonsistenzen auf, wie in CM Crossroads dokumentiert
Eingeschränkte Richtlinien mit Base ClearCase
Wenn Sie ClearCase ohne UCM verwenden, müssen Sie eine Richtlinie definieren, um:
- Zweig erstellen (andernfalls kann jeder einen Zweig erstellen, und Sie erhalten ein Gazillon davon mit einem Alptraum für den Merge-Workflow)
- setzen Etiketten (sonst vergessen Sie einige Dateien zu markieren, oder Sie ein Label setzen , wo Sie nicht sollten, oder Sie „bewegen“ (Keuchen) ein Etikett von einer Version auf eine andere: mindestens UCM Basislinien können nicht verschoben werden)
- Änderungssatz definieren . ChangeSets existieren nur bei UCM-Aktivitäten. Mit Base ClearCase werden Sie auf clevere "
cleartool find
" Anfragen reduziert ...
Keine Bewerbungsrechte
Die ClearCase-Rechteverwaltung basiert vollständig auf Systemrechten.
Das bedeutet, dass Sie Ihren Benutzer bei der richtigen Systemgruppe registrieren müssen. Dies ist nicht immer einfach, wenn Sie ein Ticket für Ihren IT-Service eingeben müssen, damit er sich ordnungsgemäß registrieren kann.
Fügen Sie dazu eine heterogene Umgebung hinzu (Benutzer unter Windows und Server unter Unix), und Sie müssen Ihren Benutzer sowohl unter Unix als auch unter Windows registrieren! (mit demselben Login / Gruppennamen). Es sei denn, Sie stellen eine Art LDAP-Korrespondenz zwischen die beiden Welten (wie Centrify ).
Keine erweiterte API
- Nur die CLI ist vollständig ("
cleartool
" ist die ClearCase-Befehlszeilenschnittstelle). Dies bedeutet, dass jedes Skript (in Perl oder einer anderen Sprache) darin besteht, die Ausgabe dieser cleartool
Befehle zu analysieren. )
- ClearCase Automation Library (CAL) existiert, ist aber recht begrenzt
- Die Java-API ist vorhanden, jedoch nur für Webansichten für den CCRC-Client.
Anzeigen von Speichern, die nicht einfach zentralisiert / gesichert werden können
Die Ansichtsspeicher entsprechen der ".svn" von SubVersion, außer dass in allen Verzeichnissen eines SubVersion-Arbeitsbereichs nur ein "Ansichtsspeicher" pro Ansicht anstelle vieler .svn vorhanden ist. Das ist gut.
Was schlecht ist, ist, dass jede Operation innerhalb einer Ansicht (ein einfaches " ls
", Auschecken, Prüfen, ...) eine Netzwerkanforderung an den view_server- Prozess auslöst , der Ihren Ansichtsserver verwaltet.
2 Optionen:
- Deklarieren Sie Ihren Ansichtsspeicher auf Ihrer Workstation: Aus Gründen der Skalierbarkeit können Sie so viele Ansichten haben, wie Sie möchten, ohne das LAN zu belasten. Die gesamte Kommunikation erfolgt direkt auf Ihrer Workstation. ABER wenn diese Maschine an dir stirbt, verlierst du deine Sicht .
- Deklarieren Sie Ihren Ansichtsspeicher auf einem zentralen Server: Dies bedeutet, dass der gesamte view_server-Prozess dort erstellt wird und dass alle Vorgänge in einer Ansicht eines Benutzers mit diesem Server kommunizieren müssen. Dies ist möglich, wenn die Infrastruktur "richtig" ist (spezielles Hochgeschwindigkeits-LAN, dedizierter Server, ständige Überwachung), aber in der Praxis unterstützt Ihr LAN diesen Modus nicht.
Der erste Modus bedeutet: Sie müssen sich Ihre laufenden Arbeiten sichern (private Dateien oder ausgecheckte Dateien).
Der zweite Modus bedeutet: Ihre Workstation ist möglicherweise nicht verfügbar. Sie können sich einfach bei einer anderen anmelden und Ihre Ansichten zurückerhalten (für die private Ausführung ausführen) Dateien einer Schnappschussansicht)
Nebendiskussion über dynamische Ansichten :
Um den Aspekt "dynamische Ansicht" zu erweitern, hat er einen Vorteil (es ist dynamisch) und einen Nachteil (es ist dynamisch).
Dynamische Ansichten eignen sich hervorragend, um eine einfache Umgebung einzurichten, in der eine kleine Entwicklung schnell von einem kleinen Team gemeinsam genutzt werden kann. Bei geringem Entwicklungsaufwand kann eine dynamische Ansicht zwei oder drei Entwicklern helfen, ständig miteinander in Kontakt zu bleiben und sofort zu sehen, wann das Festschreiben unterbrochen wird etwas in den anderen Ansichten.
Für komplexere Entwicklungsanstrengungen ist die künstliche "Isolation" der Snapshot-Ansicht vorzuziehen (Änderungen werden nur angezeigt, wenn Sie Ihre Snapshot-Ansicht aktualisieren oder "aktualisieren").
Für einen wirklich unterschiedlichen Entwicklungsaufwand oder Kurs ist immer noch ein Zweig erforderlich, um eine echte Code-Isolation zu erreichen (irgendwann sind Zusammenführungen erforderlich, die ClearCase sehr gut, wenn auch langsam, Datei für Datei handhabt).
Der Punkt ist, dass Sie beide aus den richtigen Gründen verwenden können.
Hinweis: Mit kleinem Team meine ich nicht "kleines Projekt". ClearCase eignet sich am besten für große Projekte. Wenn Sie jedoch dynamische Ansichten verwenden möchten, müssen Sie " Task-Zweige " einrichten , um einen geringen Entwicklungsaufwand pro Zweig zu isolieren : Auf diese Weise ein "kleines Team" (eine Teilmenge Ihres großen Teams) ) kann effizient arbeiten und seine Arbeit schnell zwischen seinen Mitgliedern teilen.
Wenn Sie dynamische Ansichten in einem "Haupt" -Zweig verwenden, in dem jeder etwas tut, würde jedes Einchecken Sie "töten", da dies einige "Build-Pausen" ohne Bezug einführen könnte mit Ihrer aktuellen Entwicklungsanstrengung.
Das wäre dann eine schlechte Verwendung dynamischer Ansichten, und das würde seine anderen Verwendungen vergessen:
- Zusätzliche Möglichkeit, auf Daten zuzugreifen , zusätzlich zu Snapshot-Ansichten. Dies bedeutet, dass es ein großartiges Tool ist, um nur die Dateien zu "sehen" (Sie können beispielsweise eine dynamische Ansicht verwenden, um die Konfigurationsspezifikation zu optimieren, bis Sie sehen, was Sie wollen, und diese dann kopieren Regeln in Ihre übliche Schnappschussansicht)
- Eine Seitenansicht zum Zusammenführen: Sie arbeiten mit Ihrer Snapshot-Ansicht, aber für Zusammenführungen können Sie Ihre dynamische "Schwesteransicht" ("Schwester" wie in "derselben Konfigurationsspezifikation") verwenden, um eine fehlgeschlagene Zusammenführung aufgrund von zu vermeiden Ausgecheckte Dateien (an denen Sie gerade an Ihrer Snapshot-Ansicht arbeiten würden) oder aufgrund einer Snapshot-Ansicht, die nicht vollständig auf dem neuesten Stand ist. Sobald die Zusammenführung abgeschlossen ist, aktualisieren Sie Ihre reguläre Snapshot-Ansicht und setzen Ihre Arbeit fort.
Die direkte Entwicklung in einer dynamischen Ansicht ist nicht immer die beste Option, da alle (nicht ausgecheckten) Dateien über das Netzwerk gelesen werden .
Das bedeutet, dass auf die von Ihrer IDE benötigte DLL, JAR oder Exe über das Netzwerk zugegriffen wird, was den Kompilierungsprozess erheblich verlangsamen kann.
Mögliche Lösungen:
- eine Schnappschussansicht mit allem darin
- Eine Snapshot-Ansicht mit DLL oder JAR oder Exe (Dateien, die nicht alle fünf Minuten geändert werden: ein Update pro Tag) und eine dynamische Ansicht, in der nur die Quellen sichtbar sind.