Szenarien für die Interaktion zwischen Basar und SVN

554
Adam Badura

In unserem Unternehmen verwenden wir das SVN-Repository. Ich programmiere sowohl von Arbeit (Hauptort) als auch von zu Hause aus (meistens Experimente und Refactoring). Das sind zwei verschiedene Maschinen, in unterschiedlichen Netzwerken und fast nie gleichzeitig eingeschaltet (immerhin bin ich entweder bei der Arbeit oder zu Hause ...)

Ich wollte einem verteilten Versionskontrollsystem eine Chance geben und einige der Probleme lösen, die mit SVN-basierten Prozessen und mit zwei Rechnern verbunden sind. Von git, Mercurial und Bazaar aus habe ich mich für Bazaar entschieden, da es behauptet, dass es von Menschen entworfen wird. Ich war das erste Mal mit einem verteilten System und einer schönen und einfachen Benutzeroberfläche für mich wichtig.


Funktionen, die ich erreichen wollte, waren:

  1. In der Lage sein, vom SVN-Repository aus zu aktualisieren und sich zu verpflichten.
  2. In der Lage zu sein, vor Ort Arbeitsschritte für eine Aufgabe festzulegen.
  3. Wenige getrennte Aufgaben gleichzeitig in den eigenen lokalen Niederlassungen haben.
  4. In der Lage zu sein, diese Zweige zwischen meiner Arbeit und meinem Heimcomputer zu teilen.

Als Transportmittel zwischen Arbeits- und Heimcomputer wollte ich einen Pen-Drive verwenden. Firmenserver funktioniert nicht, da ich dort nichts installieren kann. Ein Web-Service-Repository wird auch nicht funktionieren, da ich möglicherweise keinen Quellcode in das Web hochladen kann (insbesondere wenn es öffentlich wäre, was bei kostenlosen Web-Services ein üblicher Fall zu sein scheint).

Dieser Transport sollte auf Bazaar basieren (oder was auch immer ich damit enden werde), sodass er mehr oder weniger automatisch durchgeführt werden kann. Manuelles Kopieren und Einfügen einiger Ordner oder Erstellen von Patch-Dateien (vorausgesetzt, sie funktionieren - ich habe schlechte Erfahrungen mit Patch-Dateien in SVN) würde auch funktionieren, wenn es keine bessere Lösung gibt.

Der Pen-Drive sollte jedoch nur für den Transport verwendet werden. Ich möchte dort nicht bearbeiten oder bauen.


Ich habe versucht, die Bazaar-Richtlinien für die Integration mit SVN zu befolgen. Aber ich habe versagt. Ich habe beide probiert

bzr svn-import 

und

bzr checkout 

URL aus meinem Repository als beide https://...und svn+https://.... In einigen Fällen gab es einige Probleme mit Zertifikaten, aber die Ausgabe gab ein Argument an, um sie zu ignorieren, also tat ich das. Manchmal wurde ich gebeten, mich einzuloggen (in anderen Fällen erinnerte es sich vielleicht ... ich weiß es nicht), was ich getan habe.

Alle liefen sehr langsam (dies könnte unser Serverproblem sein) und wurden irgendwann aufgrund einer Verbindungsunterbrechung unterbrochen (das ist fast sicher unser Serverproblem: es bricht die Verbindung nach einiger Zeit ab). Da (im Gegensatz zu SVN) der Neustart jedoch nicht von einem Punkt aus beginnt, an dem er unterbrochen wurde, konnte ich nicht alle ~ 19000-Revisionen erreichen (endet normalerweise bei etwa 150).


Was und wie soll ich mit Bazaar vorgehen? Ist es möglich, das SVN-Repository irgendwie aus der lokalen Kasse zu importieren (damit ich die Verbindungsunterbrechung nicht erleide)? Mir wurde gesagt, dass ein Kollege, der früher mit uns zusammengearbeitet hat, etwas Ähnliches (Importieren des SVN-Repositorys mit vollständiger Historie) mit Mercurial wie in kürzester Zeit gemacht hat. Deshalb überlege ich mir ernsthaft, es mit Mercurial zu versuchen, auch wenn es nur darum geht, ob das funktioniert.

Aber wie lauten Ihre allgemeinen Richtlinien, um die aufgeführten Funktionen zu erreichen?

1
Ich habe bereits (gerade jetzt) ​​Mercurial ausprobiert, es scheint jedoch, dass es keine direkte Unterstützung für SVN gibt und das Wiki warnt, dass die vorhandene Unterstützung durch Plug-Ins nicht produktionsbereit ist. Trotzdem entschied ich mich, es auszuprobieren, aber ich konnte das Plug-In nicht installieren. Ich bin "Windows-Kerl". Ich möchte eine exe / msi-Datei haben, um einen Doppelklick auszuführen und alles erledigen zu lassen. Während "hgsubversion" (diese, die ich ausprobiert habe) beim Installieren von Anweisungen begann, begann man mit dem Herunterladen und dem Erstellen von Quellen. Ich habe etwas heruntergeladen, das wie "binär" aussah, aber ich konnte nicht finden, wo ich es ablegen und die Erweiterung aktivieren sollte. Ich habe aufgegeben (vorerst). Adam Badura vor 12 Jahren 0
Dann wechselte ich zu Git, um daran erinnert zu werden, dass Cygwin oder msysGit erforderlich waren. Aber ich werde es trotzdem versuchen. Die Download-Seite http://code.google.com/p/msysgit/downloads/list darf nicht erwähnt werden. Es ist nicht klar, was heruntergeladen werden soll, wenn ich die neueste stabile Version verwenden möchte, da die letzten Versionen alle als Beta gekennzeichnet sind. .) Adam Badura vor 12 Jahren 0
Ich * benutze * hg + hgubversion ohne große Kopfschmerzen. Lazy Badger vor 12 Jahren 0
Nur einige URLs zum Lesen (nicht in englischer Sprache ausgelassen) [Why Not Bazaar] (http://zakalwe.fi/~shd/articles/why_not_bazaar.html) [Kein heiliger Krieg - nur einige wichtige Fakten] (http: // selenic.com/pipermail/mercurial/2010-April/031191.html) Lazy Badger vor 12 Jahren 0

2 Antworten auf die Frage

1
mgorven

Ich glaube, dass Bazaar das vernünftigste DVCS ist und besonders gut für Benutzer geeignet ist, die mit Subversion vertraut sind. Es kann sehr effektiv mit einem Subversion-System verwendet werden.

Es sieht so aus, als würde der bzr svn-importBefehl alle Zweige von Subversion importieren, was wahrscheinlich nicht das ist, was Sie wollen. Es ist nicht möglich, aus einem Subversion-Checkout zu importieren, da Subversion nicht den gesamten Verlauf lokal speichert.

Da Sie mehrere Zweige verwenden möchten, sollten Sie zunächst ein freigegebenes Repository erstellen, um beim Verzweigen Speicherplatz und Zeit zu sparen.

bzr init-repo ~/project 

Verwenden Sie dann den bzr checkoutBefehl, um einen Checkout von Ihrem Subversion-Trunk zu erstellen. Geben Sie die Subversion-URL zum Projekttrunk an.

cd ~/project bzr checkout https://svn.example.com/project/trunk trunk 

Sie haben dann einen Bazaar-Baum in ~ / project / trunk, der an den Subversion-Stamm gebunden ist. Eine gebundene Verzweigung bedeutet, dass Commits automatisch an die entfernte Verzweigung übertragen werden. Das heißt, alles, was Sie hier festlegen, wird an den Subversion-Trunk übergeben.

Wenn Sie Änderungen vornehmen möchten, erstellen Sie einen neuen Zweig in Ihrem lokalen Trunk.

cd ~/project bzr branch trunk fix-some-bugs 

Arbeite in ~ / project / fix-some-bugs und mache einen Commit, während du weitergehst. All dies geschieht lokal und hat keinen Einfluss auf den Subversion-Trunk. Sie können beliebig viele Zweige erstellen.

Wenn Sie diese Änderungen in den Subversion-Trunk übernehmen möchten, führen Sie den Zweig in Ihren lokalen Trunk ein. Vergewissern Sie sich zunächst, dass Ihr lokaler Trunk durch die Verwendung von auf dem neuesten Stand ist bzr pull.

cd ~/project/trunk bzr pull bzr merge ../fix-some-bugs bzr commit 

Dadurch werden alle Änderungen, die Sie in der Verzweigung vorgenommen haben, als einzelne Revision in Subversion festgelegt (auch wenn Sie in der Verzweigung mehrere Zusagen gemacht haben).

0
janos

Es gibt eine Möglichkeit, unterbrochene Abrechnungen fortzusetzen. Wenn Sie ein gemeinsam genutztes Repository erstellen und dann die Überprüfung darin starten, können Sie das Verzeichnis mit unvollständigen Daten löschen, wenn die Überprüfung unterbrochen ist, und den Befehl zur Überprüfung wiederholen. So was:

bzr init-repo ~/project cd ~/project bzr checkout https://svn.example.com/project/trunk # ... gets interrupted ... rm -fr trunk bzr checkout https://svn.example.com/project/trunk 

Wiederholen Sie den Vorgang so lange, wie es dauert.

Übrigens, die Kasse ist anfangs extrem langsam, weil sie den gesamten Verlauf herunterlädt. Dies ist auch der Grund, warum Sie nicht einfach eine lokale Subversion-Kasse importieren können, da Subversion nur eine einzige Revision herunterlädt und nicht den vollständigen Verlauf hat.

Nachdem der Checkout abgeschlossen ist, können Sie den Zweig genauso verwenden wie Subversion. Bevor Sie mit der Arbeit an neuem Code beginnen, müssen Sie bzr updatedas Neueste und Beste aus Ihrem Unternehmensprojekt herausholen, wenn Sie sich verpflichten möchten, dass Sie sich wie gewohnt verpflichten, und es wird für Subversion genau richtig sein.

Sie können die verteilten Funktionen von Bazaar vollständig nutzen. Alles, was Sie in Ihrer Frage beschreiben, ist mit Bazaar möglich, aber um dies zu tun, ist ein gutes Verständnis der verteilten Versionskontrolle erforderlich. Die Tatsache, dass der Backend-Repository-Server Subversion ist, macht in der Praxis kaum einen Unterschied, das bzr-svn-Plugin macht alles transparent.