it-swarm.com.de

Gibt es ein Migrationswerkzeug von CVS nach Git?

Ich beabsichtige, von CVS zu Git zu wechseln. Im Falle von SVN scheint cvs2svn zu sein. Gibt es ein ähnliches Tool für die einfache Migration von CVS zu Git? 

63
freddiefujiwara

Das einzige Tool, das incremental importiert, scheint git-cvsimport zu sein. Wenn Sie (migrate) von CVS nach Git konvertieren möchten, scheint die beste Lösung für den Moment über cvs2git-Modus von cvs2svn zu liegen.

Siehe auch Interfaces Frontends And Tools Seite im Git-Wiki, Abschnitt über die Interaktion mit anderen Revisionskontrollsystemen.

32
Jakub Narębski

cvs2git

Zusätzlich zu den bereitgestellten Antworten finden Sie hier eine Anleitung, wie Sie cvs mit dem cvs2git-Tool in git konvertieren können. Modulname ist hier der Name des CVS-Verzeichnisses, das Sie importieren möchten.

Voraussetzungen

cvs2svn package (das den Befehl cvs2git enthält) sollte bereits installiert sein.

Update: Die Schritte 1 und 2 sind nicht vollständig korrekt. Lesen Sie vor dem Versuch den folgenden Kommentar von mhagger, dem Betreuer von cvs2git

  1. checkout-Modulname

    cvs -d URL co -P modulename
    
  2. erstellen Sie ein leeres CVSROOT, das von cvs2git benötigt wird

    mkdir modulename/CVSROOT
    
  3. laden Sie ein Beispiel für cvs2git.options unter http://cvs2svn.tigris.org/svn/cvs2svn/trunk/cvs2git-example.options herunter (Benutzer "guest" ohne Kennwort)

  4. bearbeiten Sie die Datei cvs2git.options. Ersetzen Sie r'test-data/main-cvsrepos 'durch' modulenname '. Autoren bearbeiten transformiert.

    # edit this
    run_options.set_project(  r'modulename',
    
    # and this
    author_transforms={
        'jrandom' : ('J. Random', '[email protected]'),
        'mhagger' : 'Michael Haggerty <[email protected]>',
    
  5. führen Sie cvs2git aus, um git-Temp-Dateien zu erstellen

    cvs2git  --options=cvs2git.options --fallback-encoding utf-8
    
  6. erstellen Sie Git Repository

    mkdir gitrepo && cd gitrepo && git init .
    
  7. import von git-Temp-Dateien, die mit cvs2git erstellt wurden

    cat ../cvs2git-tmp/git-{blob,dump}.dat | git fast-import
    
  8. checkout-Arbeitskopie

    git reset --hard
    
17
Vanuan

cvs2svn hat einen cvs2git Modus.

13
bdonlan

Wenn jemand noch immer das Pech hat, CVS zu verwenden, könnten Sie "Mist" versuchen: https://github.com/rcls/crap Es ist schnell (sofern der Zugriff auf CVS schnell sein kann), unterstützt das messes, die Sie in cvs repos finden, und inkrementelle.

8
user2603340

Eine Alternative wäre die Verwendung von git cvsimport *

7
ralphtheninja

Ich habe das selbst nicht ausprobiert, aber Freunde berichten von gutem Erfolg, zuerst von CVS in SVN und dann von SVN in Git. Es scheint, dass die Werkzeuge für diese jeweiligen Übergänge gründlicher durchgerüttelt wurden als ein direkter Übergang von CVS zu Git.

5
Dave W. Smith

Ich habe cvs2git, git-cvsimport und parsecvs ausprobiert.

cvs2git erstellt (soweit ich mich erinnere) manchmal falsche Äste für Tags.

git-cvsimport unterstützt nicht mehrere Tags für ein Changeset. Es ist jedoch möglich, einige zusätzliche Änderungen für cvsps zu ergreifen, um es zu unterstützen, und den ursprünglichen git-cvsimport in etwas ändern, das aktualisierte cvsps verwendet (ich habe es ausprobiert und es scheint zu funktionieren). Auf der Vorteilsseite unterstützt es inkrementelle Aktualisierungen und hat einige Logik, um Zusammenführungen ordnungsgemäß zu importieren (ERFORDERT jedoch ein geeignetes Format für die Festschreibungsnachricht).

parsecvs haben mir bisher die besten Ergebnisse gebracht. Leider kann der im Internet verfügbare Code mit dem neuesten Git nicht sauber kompiliert werden. Die Änderung ist zwar nicht trivial, ist machbar.

EDIT: Es sieht so aus, als ob ESR sowohl cvsps als auch parsecvs übernommen hat. Es besteht also Hoffnung für die Migration von CVS-> GIT. ABER er hat bereits auf einer Mailingliste erwähnt, dass er einige der Werkzeuge, die er kürzlich übernommen hat, für tot erklärt hat.

2
Tomek

Sie können der Liste fromcvs hinzufügen. Es lässt sich gut konvertieren und ist extrem schnell und auch inkrementell. Es werden keine klebrigen Tags verwendet, jedoch nur Zweige. 

2
robinr

Sie können git cvsimport verwenden. Es muss cvsps installiert werden, aber Sie müssen 2.x installieren, da 3.x nicht mehr inkompatibel ist.

Dann importieren Sie CVS-Repository auf leeren Git. Verwendungsbeispiel:

git cvsimport -C RepoName -r cvs -o master -k -v -d:pserver:[email protected]:/cvsroot/path ModuleName

Unter OSX installieren Sie cvsps-2.1 auf folgende Weise (mit brew):

brew tap homebrew/versions
brew install cvsps2
brew link  cvsps2

Sie können auch das Werkzeug cvs2git verwenden, das ein CVS-Repository in git konvertieren kann. Sie benötigen jedoch Zugriff auf ein CVSROOT-Verzeichnis.

Überprüfen Sie die cvs2git-Dokumentation auf die Installationsschritte.

Verwendungsbeispiel:

cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git /path/to/cvs/repo

Dadurch würden zwei Ausgabedateien im git-Fast-Import-Format erstellt. Die Namen dieser Dateien werden durch Ihre Optionsdatei oder Befehlszeilenargumente angegeben. Im Beispiel heißen diese Dateien cvs2git-tmp/git-blob.dat und cvs2git-tmp/git-dump.dat.

Diese Dateien können in das leere Git-Repository importiert werden:

cat git-blob.dat git-dump.dat | git fast-import

Löschen Sie anschließend den Zweig TAG.FIXUP und führen Sie gitk --all aus, um die Ergebnisse der Konvertierung anzuzeigen.

Überprüfen Sie nach mehr, indem Sie Folgendes ausführen: cvs2git --help.

1
kenorb

Ich lese die Antwort von Vanuan und mhaggers Kommentar dazu. Leider hat mhagger nicht geschrieben, wie es mit cvs2git geht. Es ist alles sehr gut hier geschrieben: http://www.mcs.anl.gov/~jacob/cvs2svn/cvs2git.html

Ich habe cvs2git anstelle von git-cvsimport verwendet, da die Dokumentation von git-cvsimport vorschlägt, stattdessen die Probleme von git-cvsimport zu verwenden: https://www.kernel.org/pub/software/scm/git/docs/git-cvsimport.html #Probleme

Es folgt das Wesentliche, das für mich funktionierte, um ein Git-Repository aus einem Sourceforge-CVS-Repository auf Debian Sid zu erstellen:

$ apt-get install cvs2svn cvs
$ mkdir project.cvs
$ rsync -av rsync://${PROJECT}.cvs.sourceforge.net/cvsroot/${PROJECT}/ project.cvs
$ cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git project.cvs
$ mkdir project.git
$ cd project.git
$ git init
$ cat ../git-blob.dat ../git-dump.dat | git fast-import

Der Schritt rsync ist erforderlich, da cvs2git Zugriff auf den gesamten Verlauf benötigt. Eine einfache Kasse reicht nicht aus.

1
josch

Ich fand cvs-fast-export hat einen hervorragenden Job gemacht. Ich musste es selbst herunterladen und kompilieren, hatte aber keine nennenswerten Probleme.

0
Edward Falk