Frage

Ich habe mit Component CS-RCS Basic für viele Jahre jetzt meine verschiedenen Single-Entwickler Projekte zu verwalten. Es ist sehr gut für mich gearbeitet, aber jetzt will ich zu einem modernen Revision Kontrollsystem migrieren, und nach meinen Möglichkeiten des Studium entschied ich mich für Mercurial.

Das Problem ist, dass ich immer ein zentrales Repository für CS-RCS verwendet habe, und ich mag jetzt für einzelne Projekte einzelne Mercurial Repositories verwenden, die Geschichte von meiner RCS-Repository zu halten.

Nachdem einige vertieften googeln ich festgestellt, dass der einzige Weg, dies zu tun ist meine RCS-Repository auf einzelnes CVS-Repositories zu konvertieren, dann die zu Mercurial konvertieren. Diese beiden Seiten waren die wohl hilfreich:

mit Jeff Atwood Idee Entsprechend fragen und meine eigene Frage zu beantworten, ich werde dies für alle beantworten, andere in dieser Situation stecken, und im Fall ich habe es wieder finden später. Wie Sie sehen, obwohl ich eine Lösung gefunden haben, ist es klobig und hat mindestens ein schwerwiegendes Problem. Wenn jemand anderes besser Methode hat würde ich sicher wie über sie zu hören.

War es hilfreich?

Lösung

Hier ist die Methode, die ich kam mit, Warzen und alle. Es ist ein bisschen ‚Fracht culty‘, da ich im Grunde nichts über CVS wissen und nicht viel (noch) über Mercurial:

Ich habe eine virtuelle Windows XP-Maschine, dass ich Schnappschüsse von dauern kann, so dass ich das tat und dann installiert CVSNT und der Windows-Kommandozeilen-Version von Mercurial (I TortoiseHg auf meiner Haupt-Maschine verwenden). Ich tat dies in einer VM so dass ich leicht von CVSNT, Mercurial loswerden konnte, und alles, was ich hatte zu schaffen, während diese einmalige Migration zu tun. Ja, ich wahrscheinlich habe das nicht zu tun, aber die VM bereits verfügbar waren, und ich habe schon genug ungeraden Bits von Anwendungen übrig von der Installation / Deinstallation Zyklen im Laufe der Jahre bekommt. : -)

Soweit ich könnte sagen, war CVSNT das einzige Programm zur Verfügung, die leicht einen CVS-Server auf einem Windows-Rechner einrichten konnte. Es scheint, dass dies zu einer Zeit frei war, aber die aktuelle Website fragt jetzt Geld. Das ist keine schlechte Sache, aber ich konnte wirklich nicht, Geld rechtfertigen nur eine einmalige Umwandlung zu tun. Ich habe schließlich eine ältere Version von CVSNT mit einer Google-Suche aufzuspüren und installiert, dass es ohne Probleme.

Hier sind die Notizen, die ich nahm, während das Lernen, wie diese Umwandlung funktioniert:

Die lange Version

Kopieren Sie den Quelltext-Ordner, den Sie von dem Hauptcomputer des Laufwerks auf das Laufwerk des VM benötigen. Kopieren Sie die verschiedenen „v“ Dateien aus dem Verzeichnis C: \ RCS Ordnerstruktur zu demselben Quellcode-Ordner auf der VM. Kopieren Sie einfach die, v Dateien aus dem entsprechenden Ordner in C: \ RCS. Öffnen Sie eine Eingabeaufforderung Feld auf der VM und geben Sie die folgende:

path %PATH%;C:\Program Files\cvsnt
mkdir \cvs-repo  [or clean the folder out if it already exists]
cvs -d \cvs-repo init
[A DIR of \cvs-repo should show a CVSROOT folder in there.]

Erstellen Sie eine Kopie des Quellcodes Ordner in \cvs-repo. \cvs-repo sollten jetzt haben nur zwei Ordner: CVSROOT und den neuen Ordner. Kopieren Sie in den entsprechenden "v" Dateien als auch.

mkdir \cvs-checkout [or clean that folder out if it already exists]
cd \cvs-checkout
cvs -d \cvs-repo co name_of_your_source_code_folder

Ein DIR von „\ cvs-Kasse \ name_of_your_source_code_folder“ alle Ihrer Quellcodedateien zeigen soll, die nun überprüft werden, von CVS aus.

Wenn Sie nicht bereits getan haben, download Mercurial von https: //www.mercurial-scm. org / und installieren. Öffnen Sie eine Kopie von Notepad und ziehen Sie die Datei „C: \ Programme \ Mercurial \ hgrc.d \ Mercurial.rc“ hinein. Unter „[Erweiterungen]“, entfernen Sie das Semikolon am Anfang der Zeile „;convert =“. Speichern Sie die Datei "C: \ Dokumente und Einstellungen \ Benutzername \ Mercurial.ini"

Zurück in der VM-Befehlszeile:

path %PATH%;C:\Program Files\Mercurial
mkdir \my-repo.hg  [or clean that folder out if it already exists]
hg convert --datesort \cvs-checkout\source_code_folder_name \my-repo.hg
cd \my-repo.hg
[A DIR of \my-repo.hg should show a new ".hg" folder.]
hg update
[A DIR should now show the ".hg" folder and all the checked-out files.]

Kopieren Sie die „.hg“ Ordner \ my-Repo auf den Quellcode-Ordner auf Ihrer Hauptfestplatte des Computers. Der Zielordner wird nun mit all der entsprechenden Änderungshistorie in TortoiseHg, aber alle markierten Dateien als geändert (Symbol Overlay von einem Ausrufezeichen in einem roten Kreis). Dies liegt daran, die neue Mercurial-Repository denkt wurden die Dateien mit Unix-Zeilenenden (0x0A) anstelle von Windows (0x0D, 0x0A) eingecheckt. Dies scheint in dem „hg convert“ Prozess geschehen, und ich habe festgestellt, keinen Weg drum herum.

Die Kurzversion

Wenn alles in der VM ist eingerichtet, hier ist was zu tun ist:

  • Löschen alles in \ cvs-repo \ cvs-Kasse, und \ my-repo.hg.
  • in der Befehlszeile, cvs -d \cvs-repo init.
  • Zurück auf dem Hauptgerät, kopieren Sie den Source-Code-Ordner in Ihrer Virtual Machine freigegebenen Ordner (das ist, wie Sie es in VirtualBox tun, andere VM-Software können Sie einfach per Drag-and-Drop lassen Sie den Ordner, in die VM) <. / li>
  • Kopieren Sie die entsprechende „v“ Dateien in den Source-Code-Ordner in der virtuellen Maschine freigegebenen Ordner.
  • Zurück in der VM, bewegen Sie die Source-Code-Ordner \ cvs-repo.
  • cd \cvs-checkout
  • cvs -d \cvs-repo co name_of_your_source_code_folder
  • hg convert --datesort \cvs-checkout\name_of_your_source_code_folder \my-repo.hg
  • cd \my-repo.hg
  • hg update
  • Kopieren Sie die .hg Ordner \ my-Repo auf die L:. Fahrt auf der VM (L ist die Laufwerkbuchstaben meines VM freigegebenen Ordner)
  • Bewegen Sie den Ordner der virtuellen Maschine Übertragungsordner auf die endgültigen Quelle-Code-Ordner auf dem Host-Computer.

Handy Batch File

Wenn ich diese Arbeit bekam, habe ich diese Batchdatei auf dem VM den Prozess so weit wie möglich zu automatisieren:

@echo off
rem Converts source code under RCS control to a Mercurial repository.
rem This batch takes one argument: the name of the source-code folder (in quotes if necessary).
rem
rem This is for a VirtualBox VM that already has CVSNT and Mercurial installed, and has a Shared Folder mapped to drive L.
@echo On the host, copy the source-code folder into the Virtual Machine Transfer folder.  Copy the appropriate ",v" files into the source-code folder in the Virtual Machine Transfer folder.
pause
@echo on
cd \
rmdir /S/Q \cvs-repo
mkdir \cvs-repo 
rmdir /S/Q \cvs-checkout
mkdir \cvs-checkout
rmdir /S/Q \my-repo.hg
mkdir \my-repo.hg
cvs -d \cvs-repo init
xcopy L:\%1 \cvs-repo\%1 /E/I
cd \cvs-checkout
cvs -d \cvs-repo co %1
hg convert --datesort %1 \my-repo.hg
cd \my-repo.hg
hg update
xcopy \my-repo.hg\.hg L:\.hg /E/I

Fazit

Also, das alles hat funktioniert, aber ließ mich mit Dateien, die die falschen Zeilenende hatten. Mit Blick auf diese Frage , ich sehe ich bin nicht der einzige mit diesem Problem. Ich kann damit leben, aber ich würde immer noch wie es zu beheben, wenn jemand eine Lösung kennt.

Andere Tipps

Wenn Mercurial hat schnell Import / Fast-Export zu unterstützen, und wenn Sie Ihre Multi-Datei-Repositories nicht Zweige verwenden, können Sie wahrscheinlich versuchen, mein rcs-fast-Export-Tool (verfügbar @ http://git.oblomov.eu/rcs-fast-export ). Obwohl ich es nur für den Export von RCS verwendet habe bisher git, bin ich nicht bekannt, dass git spezifische schnell Exportbefehle verwendet werden, so könnte es funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top