2008-11-26 5 views
8

Mein Team arbeitet an einem Projekt in CVS mit etwa 20.000 Java-Dateien. Aufgrund der Anzahl der Dateien dauert es einige Zeit, um ein cvs-Update durchzuführen. Normalerweise behalte ich etwa 5 Kopien des gesamten ausgecheckten Baums, um das Einchecken verschiedener Anfragen zu erleichtern, ohne sich Gedanken darüber machen zu müssen, welche Dateien für jede Datei geändert wurden. Es ist ein großer Schmerz, alle fünf Bäume auf dem neuesten Stand und synchron zu halten.Ist git mit cvs schneller als cvs alleine?

Ich habe gelesen, dass es ziemlich einfach ist, Git lokal mit einem Remote-cvs-Server zu verwenden, und dieser Git ist schnell. Wird die Aktualisierung meiner lokalen Bäume erheblich beschleunigt?

Ich weiß, die untere Grenze ist die Zeit, um ein Update cvs zu tun. Aber ich denke, sobald der erste Baum auf dem neuesten Stand ist, könnte es möglich sein, schnell die anderen 4 mit dem ersten zu synchronisieren, anstatt 4 weitere cvs update Befehle zu machen. Verstehe ich Git richtig?

Antwort

8

Ich benutze Git als Subversion-Client auf einem großen Projekt (in der Größenordnung von 10k-Dateien). Git ist schnell, sehr schnell. Es ist so schnell, dass ich nur einen Arbeitsklon halte und zwischen Feature-Zweigen innerhalb desselben Klons wechsle. Wie du, wenn ich Subversion benutzt hätte, hätte ich zwei oder drei ähnliche Checkouts und würde regelmäßig zwischen ihnen wechseln, da ich mehrere Dinge gleichzeitig ausgeführt habe. Manchmal war es ziemlich verwirrend. Mit den Funktionen von Git wie leichtgewichtigen Zweigen, dem Stash und "git add -p" finde ich, dass ich nicht mehr mehrere Checkouts benötige. Ich kann alles in einem Verzeichnis machen und mich nicht darum sorgen, dass ich Änderungen verliere, die ich entweder vergessen oder versehentlich überschrieben habe.

Ich habe Git nicht mit CVS verwendet, aber wenn die Integration etwas wie git-svn ist, dann wird es kein Problem sein.

+0

Die Integration von git als CVS _client_ ist schlecht im Vergleich zu SVN (zumindest war es früher, die Projekte, denen ich gefolgt bin, die CVS verwendet haben, sind davon weggewandert, daher habe ich keine neuen Erfahrungen). Es gibt einen CVS-_server_, der als Frontend für ein Git-Repository in den Quellen läuft, aber ich habe das immer nur für die verrückte Ausgabe eines kranken Geistes gehalten, also ...). – vonbrand

10

Wir machen etwas ähnliches bei der Arbeit. Wir verwenden im Grunde die master-Verzweigung in Git als eine einzelne, aktualisierte CVS-Version des Codes; Wir machen dort keine Entwicklung, nur CVS Updates. Alle unsere Entwicklungsprojekte finden dann in Featurebranchen statt, die wir neu erstellen. Wenn wir CVS-Updates für den Zweig master durchführen, schreiben wir diese Änderungen an master und dann unsere anderen Entwicklungszweige gegen master.

Es ist nicht ideal - es macht das Teilen von Zweigen mit anderen Menschen schwierig. Aber wir können mehrere Entwicklungsprojekte gleichzeitig verwalten und Verzweigungen, Verschmelzungen und Differenzen ganz einfach durchführen. Und wir interagieren nur mit CVS auf der einen master-Zweig, je nach Bedarf.

+0

Klingt ziemlich gut. Ist der Rebase-Schritt schneller als der cvs? –

+0

Ja, es ist eine Tonne schneller, weil es alles lokal ist. Es generiert im Grunde Diffs von Ihrem Zweig und wendet sie auf den neuen Leiter der Branche an. –

+0

@ CraigP.Motlin, solche Operationen in Git neigen dazu, fast sofort sein. Das Auschecken der aktuellen Version von CVS ist langsam (vielleicht langsamer als natives CVS). Whay ist ein wahrer Bär ist der erste Checkout (entweder CVS oder SVN), es ist saugt _alle_ die Revisionen. Das kann buchstäblich buchstäblich Tage für ein großes Repository dauern. Der Prozess ist ziemlich zerbrechlich, da er die Verbindung zum Server verliert und neu gestartet werden muss (und wenn er nicht fertig ist, wird nichts ausgecheckt; keine Panik, weiter). Sobald Sie eine Kopie des CVS-Repository geklont haben, können Sie das Verzeichnis einfach kopieren. – vonbrand