Suche…


Migrieren Sie von SVN zu Git mit dem Atlassian-Konvertierungsprogramm

Laden Sie das Atlassian-Konvertierungsprogramm hier herunter. Für dieses Dienstprogramm ist Java erforderlich. Stellen Sie daher sicher, dass die Java Runtime Environment- JRE auf dem Rechner installiert ist, auf dem Sie die Konvertierung durchführen möchten.

java -jar svn-migration-scripts.jar verify Sie mit dem Befehl java -jar svn-migration-scripts.jar verify ob auf Ihrem Computer eines der Programme fehlt, die zum Abschluss der Konvertierung erforderlich sind. Insbesondere überprüft dieser Befehl die Dienstprogramme Git, Subversion und git-svn . Außerdem wird überprüft, ob Sie die Migration in einem Dateisystem mit Groß- und Kleinschreibung durchführen. Die Migration zu Git sollte in einem Dateisystem durchgeführt werden, bei dem die Groß- und Kleinschreibung beachtet wird, um eine Beschädigung des Repository zu vermeiden.

Als Nächstes müssen Sie eine Autorendatei erstellen. Subversion verfolgt Änderungen nur anhand des Benutzernamens des Committers. Git verwendet jedoch zwei Informationen, um einen Benutzer zu unterscheiden: einen echten Namen und eine E-Mail-Adresse. Der folgende Befehl generiert eine Textdatei, die die Subversion-Benutzernamen ihren Git-Entsprechungen zuordnet:

java -jar svn-migration-scripts.jar authors <svn-repo> authors.txt

Dabei ist <svn-repo> die URL des Subversion-Repositorys, das Sie konvertieren möchten. Nachdem Sie diesen Befehl ausgeführt haben, werden die Identifikationsinformationen der Mitwirkenden in authors.txt . Die E-Mail-Adressen haben die Form <username>@mycompany.com . In der Autorendatei müssen Sie den Standardnamen jeder Person (der standardmäßig zu ihrem Benutzernamen wurde) manuell in ihren tatsächlichen Namen ändern. Stellen Sie sicher, dass Sie auch alle E-Mail-Adressen auf Korrektheit prüfen, bevor Sie fortfahren.

Mit dem folgenden Befehl wird ein svn-Repo als Git-Befehl geklont:

git svn clone --stdlayout --authors-file=authors.txt <svn-repo> <git-repo-name>

Dabei ist <svn-repo> dieselbe Repository-URL wie oben und <git-repo-name> der Ordnername im aktuellen Verzeichnis, in das das Repository geklont werden soll. Es gibt einige Überlegungen, bevor Sie diesen Befehl verwenden:

  • Das Flag --stdlayout von oben teilt Git mit, dass Sie ein Standardlayout mit Ordnern trunk , branches und tags . Subversion - Repositorys mit Nicht-Standard - Layouts benötigen Sie die Standorte der angeben trunk - Ordner, einen / alle branch Ordner und die tags Ordner. Dies kann durch das folgende Beispiel erreicht werden: git svn clone --trunk=/trunk --branches=/branches --branches=/bugfixes --tags=/tags --authors-file=authors.txt <svn-repo> <git-repo-name> .
  • Dieser Befehl kann je nach Größe des Repos mehrere Stunden dauern.
  • Um die Konvertierungszeit für große Repositorys zu verkürzen, kann die Konvertierung direkt auf dem Server ausgeführt werden, auf dem sich das Subversion-Repository befindet, um den Netzwerk-Overhead zu beseitigen.

git svn clone importiert die Subversion-Zweige (und den Trunk) als Remote Branches einschließlich Subversion-Tags (Remote Branches, denen das tags/ vorangestellt ist). Um diese in tatsächliche Zweige und Tags zu konvertieren, führen Sie die folgenden Befehle auf einem Linux-Computer in der angegebenen Reihenfolge aus. Nach dem Ausführen sollte git branch -a die richtigen git tag -l , und git tag -l sollte die Repository-Tags anzeigen.

git for-each-ref refs/remotes/origin/tags | cut -d / -f 5- | grep -v @ | while read tagname; do git tag $tagname origin/tags/$tagname; git branch -r -d origin/tags/$tagname; done
git for-each-ref refs/remotes | cut -d / -f 4- | grep -v @ | while read branchname; do git branch "$branchname" "refs/remotes/origin/$branchname"; git branch -r -d "origin/$branchname"; done

Die Konvertierung von SVN zu Git ist jetzt abgeschlossen! push Sie einfach Ihr lokales Repo auf einen Server, und Sie können weiterhin mit Git beitragen und einen vollständig konservierten Versionsverlauf von svn haben.

SubGit

Mit SubGit kann ein SVN-Repository einmalig in git importiert werden.

$ subgit import --non-interactive --svn-url http://svn.my.co/repos/myproject myproject.git

Migrieren Sie von SVN zu Git mit svn2git

svn2git ist ein Ruby-Wrapper für gits native SVN-Unterstützung durch git-svn . Er hilft Ihnen bei der Migration von Projekten von Subversion nach Git und speichert den Verlauf (einschließlich Stamm, Tags und Zweigverlauf).

Beispiele

So migrieren Sie ein svn-Repository mit dem Standardlayout (dh Verzweigungen, Tags und Trunk auf Stammebene des Repositorys):

$ svn2git http://svn.example.com/path/to/repo

So migrieren Sie ein svn-Repository, das sich nicht im Standardlayout befindet:

$ svn2git http://svn.example.com/path/to/repo --trunk trunk-dir --tags tags-dir --branches branches-dir

--notrunk Sie keine Zweige, Tags oder --notrunk migrieren möchten (oder nicht), können Sie die Optionen --notrunk , --nobranches und --notags .

Beispiel: $ svn2git http://svn.example.com/path/to/repo --trunk trunk-dir --notags --nobranches nur die Trunk-Historie.

Um den für Ihr neues Repository erforderlichen Speicherplatz zu reduzieren, möchten Sie möglicherweise alle Verzeichnisse oder Dateien ausschließen, die Sie hinzugefügt haben, während Sie nicht vorhanden waren (z. B. Verzeichnis oder Archive erstellen):

$ svn2git http://svn.example.com/path/to/repo --exclude build --exclude '.*\.zip$'

Post-Migration-Optimierung

Wenn Sie bereits einige tausend Commits (oder mehr) in Ihrem neu erstellten git-Repository haben, möchten Sie möglicherweise den Speicherplatz reduzieren, bevor Sie Ihr Repository auf eine Remote-Station verschieben. Dies kann mit folgendem Befehl erfolgen:

$ git gc --aggressive

Hinweis: Der vorherige Befehl kann bei großen Repositorys (zehntausende Commits und / oder Hunderte von Megabytes History) bis zu mehreren Stunden dauern.

Migrieren Sie von Team Foundation Version Control (TFVC) zu Git

Sie können von der Team Foundation-Versionskontrolle zu git migrieren, indem Sie ein Open-Source-Tool namens Git-TF verwenden. Durch die Migration wird auch Ihr vorhandener Verlauf übertragen, indem Sie tfs-checkins in git-Commits konvertieren.

Führen Sie die folgenden Schritte aus, um Ihre Lösung mithilfe von Git-TF in Git zu integrieren:

Laden Sie Git-TF herunter

Sie können Git-TF von Codeplex herunterladen (und installieren): Git-TF @ Codeplex

Klonen Sie Ihre TFVC-Lösung

Starten Sie Powershell (win) und geben Sie den Befehl ein

git-tf clone http://my.tfs.server.address:port/tfs/mycollection '$/myproject/mybranch/mysolution' --deep

Der Schalter --deep ist das Schlüsselwort, das zu beachten ist, da Git-Tf angewiesen wird, Ihren Checkin-Verlauf zu kopieren. Sie haben jetzt ein lokales Git-Repository in dem Ordner, von dem aus Sie Ihren Cloe-Befehl aufgerufen haben.

Aufräumen

  • Fügen Sie eine .gitignore-Datei hinzu. Wenn Sie Visual Studio verwenden, kann der Editor dies für Sie tun. Andernfalls können Sie dies manuell tun, indem Sie eine vollständige Datei von github / gitignore herunterladen .
  • RemoveTFS-Quellcodeverwaltungsbindungen aus der Lösung (alle * .vssscc-Dateien entfernen). Sie können Ihre Lösungsdatei auch ändern, indem Sie GlobalSection (TeamFoundationVersionControl) ... EndClobalSection entfernen

Commit & Push

Schließen Sie Ihre Konvertierung ab, indem Sie Ihr lokales Repository an Ihre Remote-Station übergeben und dies tun.

git add .
git commit -a -m "Coverted solution source control from TFVC to Git"

git remote add origin https://my.remote/project/repo.git

git push origin master

Mercurial zu Git migrieren

Sie können die folgenden Methoden verwenden, um ein Mercurial Repo in Git zu importieren:

  1. Mit schnellem Export :
cd
git clone git://repo.or.cz/fast-export.git
git init git_repo
cd git_repo
~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD
  1. Verwendung von Hg-Git : Eine sehr detaillierte Antwort hier: https://stackoverflow.com/a/31827990/5283213

  2. Verwenden des GitHub-Importers : Folgen Sie den (ausführlichen) Anweisungen bei GitHub .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow