Ich habe das Git-Handbuch, die FAQ, den Git-SVN-Crashkurs usw. gelesen und alle erklären dies und das, aber nirgendwo finden Sie eine einfache Anleitung wie:
SVN-Repository in: svn://myserver/path/to/svn/repos
Git-Repository in: git://myserver/path/to/git/repos
git-do-the-magic-svn-import-with-history \
svn://myserver/path/to/svn/repos \
git://myserver/path/to/git/repos
Ich erwarte nicht, dass es so einfach ist, und ich erwarte nicht, dass es ein einzelner Befehl ist. Aber ich erwarte, dass es nicht versucht, etwas zu erklären - nur um zu sagen, welche Schritte in diesem Beispiel zu unternehmen sind.
svn
git
version-control
git-svn
Milan Babuškov
quelle
quelle
Antworten:
Magie:
Git und SVN arbeiten sehr unterschiedlich. Sie müssen Git lernen, und wenn Sie Änderungen von SVN Upstream verfolgen möchten, müssen Sie lernen
git-svn
. Diegit-svn
Hauptseite enthält einen guten Beispielabschnitt :quelle
Erstellen Sie eine Benutzerdatei (dh
users.txt
) für die Zuordnung von SVN-Benutzern zu Git:Mit diesem Einzeiler können Sie eine Vorlage aus Ihrem vorhandenen SVN-Repository erstellen:
SVN wird gestoppt, wenn ein fehlender SVN-Benutzer nicht in der Datei gefunden wird. Danach können Sie die Datei aktualisieren und dort weitermachen, wo Sie aufgehört haben.
Ziehen Sie nun die SVN-Daten aus dem Repository:
Dieser Befehl erstellt ein neues Git-Repository in
dest_dir-tmp
und beginnt mit dem Abrufen des SVN-Repositorys. Beachten Sie, dass das Flag "--stdlayout" impliziert, dass Sie das gemeinsame SVN-Layout "trunk /, branch /, tags /" haben. Wenn Ihr Layout unterscheidet, werden vertraut mit--tags
,--branches
,--trunk
Optionen (im Allgemeinengit svn help
).Alle gängigen Protokolle sind erlaubt:
svn://
,http://
,https://
. Die URL sollte auf das Basis-Repository abzielen, z. B. http://svn.mycompany.com/myrepo/repository . Die URL-Zeichenfolge darf nicht enthalten/trunk
,/tag
oder/branches
.Beachten Sie, dass es nach dem Ausführen dieses Befehls sehr oft so aussieht, als ob der Vorgang "hängen bleibt / einfriert", und es ist ganz normal, dass er nach der Initialisierung des neuen Repositorys für eine lange Zeit hängen bleiben kann. Schließlich werden dann Protokollmeldungen angezeigt, die darauf hinweisen, dass die Migration erfolgt.
Beachten Sie auch, dass
--no-metadata
Git , wenn Sie das Flag weglassen , Informationen über die entsprechende SVN-Revision an die Festschreibungsnachricht anfügt (dhgit-svn-id: svn://svn.mycompany.com/myrepo/<branchname/trunk>@<RevisionNumber> <Repository UUID>
)Wenn kein Benutzername gefunden wird, aktualisieren Sie Ihre
users.txt
Datei wie folgt :Wenn Sie ein großes Projekt haben, müssen Sie diesen letzten Befehl möglicherweise mehrmals wiederholen, bis alle Subversion-Commits abgerufen wurden:
Wenn der Vorgang abgeschlossen ist, checkt Git den SVN
trunk
in einen neuen Zweig aus. Alle anderen Zweige werden als Fernbedienungen eingerichtet. Sie können die anderen SVN-Zweige anzeigen mit:Wenn Sie andere Remote-Zweige in Ihrem Repository behalten möchten, möchten Sie für jeden manuell einen lokalen Zweig erstellen. (Stamm / Master überspringen.) Wenn Sie dies nicht tun, werden die Zweige im letzten Schritt nicht geklont.
Tags werden als Zweige importiert. Sie müssen einen lokalen Zweig erstellen, ein Tag erstellen und den Zweig löschen, um sie als Tags in Git zu haben. So machen Sie es mit dem Tag "v1":
Klonen Sie Ihr GIT-SVN-Repository in ein sauberes Git-Repository:
Die lokalen Zweige, die Sie zuvor aus Remote-Zweigen erstellt haben, wurden nur als Remote-Zweige in das neue geklonte Repository kopiert. (Trunk / Master überspringen.) Für jeden Zweig, den Sie behalten möchten:
Entfernen Sie abschließend die Fernbedienung aus Ihrem sauberen Git-Repository, die auf das jetzt gelöschte temporäre Repository verweist:
quelle
Migrieren Sie Ihr Subversion-Repository sauber in ein Git-Repository . Zuerst müssen Sie eine Datei erstellen, die Ihre Subversion-Commit-Autorennamen Git-Commitern zuordnet, z. B
~/authors.txt
.:Anschließend können Sie die Subversion-Daten in ein Git-Repository herunterladen:
Wenn Sie einen Mac verwenden, können Sie
git-svn
MacPorts durch Installation herunterladengit-core +svn
.Befindet sich Ihr Subversion-Repository auf demselben Computer wie Ihr gewünschtes Git-Repository, können Sie diese Syntax für den Init-Schritt verwenden, andernfalls alle:
quelle
=
in ,users.txt
weil der Import wurde abgebrochen , und ich war ein leeres Repository bekommen.file:///
weigerte sich zu arbeiten, nur ich verwendetsvnserve.exe --daemon
und dannsvn://localhost/home/user/repo
stattdessen verwendet.authors.txt
in konvertierenutf-8 without BOM
.git svn init
,git svn config
dann schließlichgit svn fetch
als es leichter war , Um es so zu machen, musste ich mehrmals holen, um es richtig zu machen. cmcgintys Single-Linegit svn clone
, die alle drei macht, war mir zu durcheinander.Ich habe das Skript svn2git verwendet und funktioniert wie ein Zauber.
quelle
Ich empfehle, sich mit Git vertraut zu machen, bevor Sie versuchen, git-svn ständig zu verwenden, dh SVN als zentrales Repo beizubehalten und Git lokal zu verwenden.
Für eine einfache Migration mit dem gesamten Verlauf sind jedoch die folgenden einfachen Schritte aufgeführt:
Initialisieren Sie das lokale Repo:
Markieren Sie, wie weit zurück Sie mit dem Importieren von Revisionen beginnen möchten:
(oder einfach "git svn fetch" für alle Umdrehungen)
Eigentlich alles seitdem holen:
Sie können das Ergebnis des Imports mit Gitk überprüfen. Ich bin nicht sicher, ob dies unter Windows funktioniert, es funktioniert unter OSX und Linux:
Wenn Sie Ihr SVN-Repo lokal geklont haben, können Sie es zur einfacheren Zusammenarbeit auf ein zentrales Git-Repo übertragen.
Erstellen Sie zuerst Ihr leeres Remote-Repo (vielleicht auf GitHub ?):
Synchronisieren Sie dann optional Ihren Hauptzweig, damit der Pull-Vorgang den Remote-Master automatisch mit Ihrem lokalen Master zusammenführt, wenn beide neue Inhalte enthalten:
Danach könnten Sie daran interessiert sein, mein eigenes
git_remote_branch
Tool auszuprobieren, das Ihnen beim Umgang mit entfernten Zweigen hilft:Erster erklärender Beitrag: " Git Remote Branches "
Follow-up für die neueste Version: " Zeit für die Zusammenarbeit mit git_remote_branch "
quelle
git push origin master
Es gibt eine neue Lösung für die reibungslose Migration von Subversion zu Git (oder für die gleichzeitige Verwendung beider): SubGit .
Ich arbeite selbst an diesem Projekt. Wir verwenden SubGit in unseren Repositories - einige meiner Teamkollegen verwenden Git und einige Subversion und bisher funktioniert es sehr gut.
Um mit SubGit von Subversion zu Git zu migrieren, müssen Sie Folgendes ausführen:
Danach erhalten Sie das Git-Repository in svn_repos / .git und können es klonen oder Subversion und dieses neue Git-Repository weiterhin zusammen verwenden: SubGit stellt sicher, dass beide immer synchron bleiben.
Wenn Ihr Subversion-Repository mehrere Projekte enthält, werden mehrere Git-Repositorys im Verzeichnis svn_repos / git erstellt. Gehen Sie wie folgt vor, um die Übersetzung vor dem Ausführen anzupassen:
Mit SubGit können Sie auf reines Git (nicht git-svn) migrieren und es verwenden, während Sie Subversion so lange beibehalten , wie Sie es benötigen (z. B. für Ihre bereits konfigurierten Build-Tools).
Hoffe das hilft!
quelle
subgit import
Befehl) nicht einmal eine Lizenz erforderlich zu sein scheint. Eine genaue Übersetzung dersvn:ignore
Eigenschaft in.gitignore
Dateien ist ebenfalls enthalten.git svn
.Siehe die offizielle git-svn-Manpage . Schauen Sie insbesondere unter "Grundlegende Beispiele" nach:
quelle
Pro Git 8.2 erklärt es: http://git-scm.com/book/en/Git-and-Other-Systems-Migrating-to-Git
quelle
SubGit (gegen Blue Screen of Death)
Es ist alles.
+ Zum Aktualisieren von SVN ein Git-Repository, das mit dem ersten Befehl erstellt wurde.
Ich habe eine Möglichkeit verwendet, um sofort auf Git zu migrieren und ein riesiges Repository zu erhalten.
Natürlich brauchen Sie etwas Vorbereitung.
Aber Sie können den Entwicklungsprozess überhaupt nicht stoppen.
Hier ist mein Weg.
Meine Lösung sieht aus wie:
Die Migration nimmt viel Zeit für ein großes SVN-Repository in Anspruch.
Die Aktualisierung der abgeschlossenen Migration dauert jedoch nur wenige Sekunden.
Natürlich benutze ich SubGit , Mama. git-svn macht mich zum Blue Screen of Death . Nur ständig. Und git-svn langweilt mich mit Gits schwerwiegendem Fehler " Dateiname zu lang ".
SCHRITTE
1. Laden Sie SubGit herunter
2. Bereiten Sie die Migrations- und Aktualisierungsbefehle vor.
Nehmen wir an, wir machen das für Windows (es ist trivial, auf Linux zu portieren).
In einer Installation des SubGit ist Verzeichnis (subgit-2.XX \ ist), erstellen Sie zwei .bat - Dateien.
Inhalt einer Datei / eines Befehls für die Migration:
Der Befehl "start" ist hier optional (Windows). Es ermöglicht das Anzeigen von Fehlern beim Start und lässt eine Shell nach Abschluss des SubGit geöffnet.
Sie können hier zusätzliche Parameter hinzufügen , die git-svn ähneln . Ich verwende nur --default-domain myCompanyDomain.com , um die Domain der E-Mail-Adresse von SVN-Autoren zu reparieren.
Ich habe die Standardstruktur des SVN-Repositorys (Trunk / Zweige / Tags) und wir hatten keine Probleme mit der "Autorenzuordnung". Also mache ich nichts mehr.
(Wenn Sie Tags wie Zweige migrieren möchten oder Ihr SVN mehrere Zweige / Tags-Ordner hat, können Sie den ausführlicheren SubGit- Ansatz verwenden. )
Tipp 1 : Verwenden Sie --minimal-revision YourSvnRevNumber, um schnell zu sehen, wie sich die Dinge entwickeln (eine Art Debugging). Besonders nützlich ist es, aufgelöste Autorennamen oder E-Mails anzuzeigen.
Oder um die Tiefe des Migrationsverlaufs zu begrenzen.
Tipp 2 : Die Migration kann unterbrochen ( Ctrl+ C) und durch Ausführen des nächsten Aktualisierungsbefehls / der nächsten Aktualisierungsdatei wiederhergestellt werden.
Ich rate nicht, dies für große Repositories zu tun. Ich habe "Java + Windows-Ausnahme" Nicht genügend Speicher "erhalten.
Tipp 3 : Erstellen Sie besser eine Kopie Ihres Ergebnis-Bare-Repositorys.
Inhalt einer Datei / eines Befehls zum Aktualisieren:
Sie können es beliebig oft ausführen, wenn Sie die Commits des letzten Teams für Ihr Git-Repository erhalten möchten.
Warnung! Berühren Sie nicht Ihr nacktes Repository (z. B. Erstellung von Zweigen).
Sie werden den nächsten schwerwiegenden Fehler nehmen:
3. Führen Sie den ersten Befehl / die erste Datei aus. Für ein großes Repository wird es eine lange Zeit dauern. 30 Stunden für mein bescheidenes Repository.
Es ist alles.
Sie können Ihr Git-Repository jederzeit und beliebig oft von SVN aus aktualisieren, indem Sie die zweite Datei / den zweiten Befehl ausführen. Und bevor Sie Ihr Entwicklungsteam auf Git umstellen.
Es dauert nur Sekunden.
Es gibt noch eine nützliche Aufgabe.
Verschieben Sie Ihr lokales Git-Repository in ein entferntes Git-Repository
Ist es dein Fall? Fahren wir fort.
Lauf:
Standardmäßig kann Ihr Git keine großen Chunks senden. tödlich: Das entfernte Ende legte unerwartet auf
Lass uns losrennen:
524288000 - 500 MB 1073741824 - 1 GB usw.
Beheben Sie die Probleme mit Ihrem lokalen Zertifikat . Wenn Ihr Git-Server ein defektes Zertifikat verwendet.
Ich habe Zertifikate deaktiviert .
Außerdem kann es auf Ihrem Git-Server zu Einschränkungen bei der Anforderungsmenge kommen, die korrigiert werden müssen .
Führen Sie mit einem lokalen Git:
( Git Push Origin '*: *' für alte Git-Versionen)
Wenn Sie Folgendes erhalten: Fehler: Git kann nicht erzeugt werden: Keine solche Datei oder kein solches Verzeichnis ... Für mich löst die vollständige Neuerstellung meines Repositorys diesen Fehler (30 Stunden). Sie können die nächsten Befehle ausprobieren
Oder versuchen Sie, Git neu zu installieren ( für mich nutzlos ). Oder Sie können aus allen Tags Zweige erstellen und diese verschieben. Oder oder oder oder ...
quelle
Reposurgeon
In komplizierten Fällen ist der Reposurgeon von Eric S. Raymond das Werkzeug der Wahl. Zusätzlich zu SVN unterstützt es viele andere Versionskontrollsysteme über das
fast-export
Format und auch CVS . Der Autor berichtet über erfolgreiche Konvertierungen von alten Repositories wie Emacs und FreeBSD .Das Tool zielt anscheinend auf eine nahezu perfekte Konvertierung ab (z. B. das Konvertieren der SVN-
svn:ignore
Eigenschaften in.gitignore
Dateien), selbst bei schwierigen Repository-Layouts mit einer langen Geschichte. In vielen Fällen sind andere Tools möglicherweise einfacher zu verwenden.Bevor Sie sich mit der Dokumentation der
reposurgeon
Befehlszeile befassen , lesen Sie unbedingt die ausgezeichnete DVCS-Migrationsanleitung, in der der Konvertierungsprozess Schritt für Schritt beschrieben wird.quelle
Dieser Leitfaden auf der Website von atlassian ist einer der besten, den ich gefunden habe:
https://www.atlassian.com/git/migration
Dieses Tool - https://bitbucket.org/atlassian/svn-migration-scripts - ist unter anderem auch sehr nützlich, um Ihre author.txt zu generieren.
quelle
Sie müssen installieren
Von diesem Link kopiert http://john.albin.net/git/convert-subversion-to-git .
1. Rufen Sie eine Liste aller Subversion-Committer ab
Subversion listet einfach den Benutzernamen für jedes Commit auf. Die Commits von Git enthalten viel umfangreichere Daten, aber im einfachsten Fall muss der Commit-Autor einen Namen und eine E-Mail-Adresse haben. Standardmäßig listet das Tool git-svn den SVN-Benutzernamen sowohl im Autoren- als auch im E-Mail-Feld auf. Mit ein wenig Arbeit können Sie jedoch eine Liste aller SVN-Benutzer und deren entsprechenden Git-Namen und E-Mails erstellen. Diese Liste kann von git-svn verwendet werden, um einfache svn-Benutzernamen in richtige Git-Committer umzuwandeln.
Führen Sie diesen Befehl im Stammverzeichnis Ihrer lokalen Subversion-Prüfung aus:
Dadurch werden alle Protokollnachrichten abgerufen, die Benutzernamen herausgerissen, doppelte Benutzernamen entfernt, die Benutzernamen sortiert und in einer Datei "autors-transform.txt" abgelegt. Bearbeiten Sie nun jede Zeile in der Datei. Konvertieren Sie beispielsweise:
das sehr gut finden:
2. Klonen Sie das Subversion-Repository mit git-svn
Dadurch wird die Standard-git-svn-Transformation (unter Verwendung der in Schritt 1 erstellten Datei autors-transform.txt) durchgeführt und das Git-Repository im Ordner "~ / temp" in Ihrem Home-Verzeichnis abgelegt.
3. Konvertieren Sie svn: ignorieren Sie die Eigenschaften in .gitignore
Wenn Ihr svn-Repo die Eigenschaften svn: ignore verwendet hat, können Sie diese einfach in eine .gitignore-Datei konvertieren, indem Sie:
4. Schieben Sie das Repository in ein Bare-Git-Repository
Erstellen Sie zunächst ein nacktes Repository und stellen Sie sicher, dass der Standardzweig mit dem Zweigstellennamen "trunk" von svn übereinstimmt.
Verschieben Sie dann das temporäre Repository in das neue nackte Repository.
Sie können das ~ / temp-Repository jetzt sicher löschen.
5. Benennen Sie den Zweig "Amtsleitung" in "Master" um
Ihr Hauptentwicklungszweig heißt "Trunk" und entspricht dem Namen in Subversion. Sie möchten es in Git's Standard-Master-Zweig umbenennen, indem Sie:
6. Bereinigen Sie Zweige und Tags
git-svn macht alle Subversions-Tags in Git zu sehr kurzen Zweigen der Form "tags / name". Sie möchten alle diese Zweige in tatsächliche Git-Tags konvertieren, indem Sie:
Dieser Schritt erfordert einige Eingaben. :-) Aber mach dir keine Sorgen; Ihre Unix-Shell bietet eine> sekundäre Eingabeaufforderung für den extra langen Befehl, der mit git for-each-ref beginnt.
quelle
GitHub verfügt jetzt über eine Funktion zum Importieren aus einem SVN-Repository . Ich habe es aber nie versucht.
quelle
svn2git
in einer anderen Antwort vorgeschlagene Programm zu verwenden .Eine etwas erweiterte Antwort mit nur Git, SVN und Bash. Es enthält Schritte für SVN-Repositorys, die nicht das herkömmliche Layout mit einem Verzeichnislayout für Trunk / Branches / Tags verwenden (SVN unternimmt absolut nichts, um diese Art von Layout durchzusetzen).
Verwenden Sie zuerst dieses Bash-Skript, um Ihr SVN-Repo nach den verschiedenen Personen zu durchsuchen, die dazu beigetragen haben, und um eine Vorlage für eine Zuordnungsdatei zu generieren:
Verwenden Sie diese
authors
Option , um eine Datei zu erstellen , in der Sie SVN-Benutzernamen Benutzernamen und E-Mails zuordnen, die von Ihren Entwicklern mithilfe vongit config
Eigenschaftenuser.name
und festgelegt wurdenuser.email
(beachten Sie, dass für einen Dienst wie GitHub nur eine passende E-Mail-Adresse ausreicht).Dann hat
git svn
Klon mit der SVN - Repository zu einem Git Repository, es geht um die Zuordnung zu sagen:git svn clone --authors-file=authors --stdlayout svn://example.org/Folder/projectroot
Dies kann unglaublich lange dauern, da git svn jede Revision für jedes vorhandene Tag oder jeden einzelnen Zweig einzeln überprüft. (Beachten Sie, dass Tags in SVN nur echte Zweige sind, sodass sie als solche in Git enden.) Sie können dies beschleunigen, indem Sie alte Tags und Zweige in SVN entfernen, die Sie nicht benötigen.
Das Ausführen auf einem Server im selben Netzwerk oder auf demselben Server kann dies ebenfalls erheblich beschleunigen. Wenn dieser Prozess aus irgendeinem Grund unterbrochen wird, können Sie ihn mit fortsetzen
git svn rebase --continue
In vielen Fällen sind Sie hier fertig. Wenn Ihr SVN-Repo jedoch ein unkonventionelles Layout hat, in dem Sie einfach ein Verzeichnis in SVN haben, das Sie in einen Git-Zweig einfügen möchten, können Sie einige zusätzliche Schritte ausführen.
Am einfachsten ist es, einfach ein neues SVN-Repo auf Ihrem Server zu erstellen, das der Konvention entspricht, und
svn copy
Ihr Verzeichnis in einen Trunk oder einen Zweig zu stellen. Dies ist möglicherweise der einzige Weg, wenn sich Ihr Verzeichnis vollständig im Stammverzeichnis des Repos befindet, als ich dies das letzte Mal versucht habegit svn
weigerte einfach, eine Kaufabwicklung durchzuführen.Sie können dies auch mit git tun. Zum
git svn clone
einfach das Verzeichnis verwenden möchten Sie in einem git Zweig setzen.Nach dem Lauf
Beachten Sie, dass hierfür Git 1.7 oder höher erforderlich ist.
quelle
Ich habe eine Schritt-für-Schritt-Anleitung ( hier ) zum Konvertieren von SVN in Git veröffentlicht, einschließlich der Konvertierung von SVN-Tags in Git-Tags und SVN-Zweigen in Git-Zweige.
Kurzfassung:
1) Klonen Sie SVN von einer bestimmten Versionsnummer. (Die Versionsnummer muss die älteste sein, die Sie migrieren möchten.)
2) Abrufen von SVN-Daten. Dieser Schritt dauert am meisten.
Wiederholen Sie git svn fetch, bis der Vorgang fehlerfrei abgeschlossen ist
3) Hauptzweig aktualisieren lassen
4) Erstellen Sie lokale Zweige aus SVN-Zweigen, indem Sie Referenzen kopieren
5) konvertiere svn tags in git tags
6) Stellen Sie ein Repository an einem besseren Ort wie Github auf
Wenn Sie weitere Informationen wünschen, lesen Sie meinen Beitrag oder fragen Sie mich.
quelle
Wir können die folgenden
git svn clone
Befehle verwenden.svn log -q <SVN_URL> | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors.txt
Der obige Befehl erstellt eine Autorendatei aus SVN-Commits.
svn log --stop-on-copy <SVN_URL>
Der obige Befehl gibt Ihnen die erste Revisionsnummer, wenn Ihr SVN-Projekt erstellt wurde.
git svn clone -r<SVN_REV_NO>:HEAD --no-minimize-url --stdlayout --no-metadata --authors-file authors.txt <SVN_URL>
Der obige Befehl erstellt das Git-Repository in local.
Das Problem ist, dass Zweige und Tags nicht in Push konvertiert werden. Sie müssen sie manuell ausführen. Zum Beispiel unten für Zweige:
Für Tags:
Schieben Sie nun Master, Zweige und Tags in das Remote-Git-Repository.
Dienstprogramm svn2git
Das Dienstprogramm svn2git entfernt manuelle Anstrengungen mit Zweigen und Tags.
Installieren Sie es mit dem Befehl
sudo gem install svn2git
. Führen Sie danach den folgenden Befehl aus.$ svn2git <SVN_URL> --authors authors.txt --revision <SVN_REV_NO>
Jetzt können Sie die Zweige und Tags auflisten und einfach verschieben.
Stellen Sie sich vor, Sie haben 20 Zweige und Tags. Mit svn2git sparen Sie natürlich viel Zeit. Deshalb gefällt es mir besser als mit nativen Befehlen. Es ist eine nette Hülle um native
git svn clone
Befehle.Ein vollständiges Beispiel finden Sie in meinem Blogeintrag .
quelle
TortoiseGit macht das. Siehe diesen Blog-Beitrag: http://jimmykeen.net/articles/03-nov-2012/how-migrate-from-svn-to-git-windows-using-tortoise-clients
Ja, ich weiß, dass das Antworten mit Links nicht großartig ist, aber es ist eine Lösung, oder?
quelle
Ich kann diese kurze Serie von Screencasts, die ich gerade entdeckt habe, nur empfehlen . Der Autor führt Sie durch die grundlegenden Vorgänge und zeigt einige fortgeschrittenere Verwendungen.
quelle
Wenn Sie SourceTree verwenden, können Sie dies direkt über die App tun. Gehe zu Datei -> Neu / Klonen und gehe dann wie folgt vor:
Öffnen Sie das Repo in SourceTree und Sie werden sehen, dass auch Ihre Commit-Nachrichten migriert wurden.
Gehen Sie nun zu Repository -> Repository-Einstellungen und fügen Sie die neuen Remote-Repo-Details hinzu. Löschen Sie die SVN-Fernbedienung, wenn Sie dies wünschen (ich habe dies über die Option "Konfigurationsdatei bearbeiten" getan).
Schieben Sie den Code auf das neue Remote-Repo, wenn Sie bereit sind, und codieren Sie frei.
quelle
Für GitLab- Benutzer habe ich hier einen Überblick darüber gegeben, wie ich von SVN migriert bin:
https://gist.github.com/leftclickben/322b7a3042cbe97ed2af
Schritte zur Migration von SVN zu GitLab
Installieren
svn.domain.com.au
.http
(andere Protokolle sollten funktionieren).git.domain.com.au
und:dev-team
.ssh [email protected]
).favourite-project
wird imdev-team
Namespace erstellt.users.txt
enthält die relevanten Benutzerdetails (ein Benutzer pro Zeile) des Formularsusername = First Last <[email protected]>
, wobeiusername
der in SVN-Protokollen angegebene Benutzername angegeben ist. (Siehe ersten Link im Abschnitt Referenzen für Details, insbesondere Antwort von Benutzer Casey).Versionen
Befehle
Das ist es! Laden Sie die Projektseite erneut in die GitLab-Web-Benutzeroberfläche und Sie sehen alle Commits und Dateien, die jetzt aufgelistet sind.
Anmerkungen
git svn clone
wird Befehl stoppen, wobei in diesem Fall, zu aktualisierenusers.txt
,cd favourite-project
undgit svn fetch
wird auch weiterhin von dort gestoppt.trunk
-tags
-branches
Layout für SVN - Repository erforderlich.git svn clone
Befehl stoppt auf der Ebene unmittelbar übertrunk/
,tags/
undbranches/
.git svn clone
Befehl erzeugt eine Menge Ausgabe, einschließlich einiger Warnungen oben; Ich habe die Warnungen ignoriert.quelle
Abgesehen davon ist der Befehl git-stash ein Glücksfall, wenn Sie versuchen, mit git-svn dcommits zu git.
Ein typischer Prozess:
svn-dcommit
Die Lösung (erfordert Git 1.5.3+):
quelle
Hier ist ein einfaches Shell-Skript ohne Abhängigkeiten, das ein oder mehrere SVN-Repositorys in Git konvertiert und an GitHub überträgt.
https://gist.github.com/NathanSweet/7327535
In ungefähr 30 Skriptzeilen wird es: Klonen mit Git-SVN, Erstellen einer Gitignore-Datei aus SVN :: Ignore-Eigenschaften, Verschieben in ein Bare-Git-Repository, Umbenennen von SVN-Trunk in Master, Konvertieren von SVN-Tags in Git-Tags und Verschieben in GitHub unter Beibehaltung der Tags.
Ich habe mir große Mühe gegeben, ein Dutzend SVN-Repositorys von Google Code auf GitHub zu verschieben. Es hat nicht geholfen, dass ich Windows verwendet habe. Ruby war auf meiner alten Debian-Box irgendwie kaputt und es war ein Witz, sie unter Windows zum Laufen zu bringen. Andere Lösungen funktionierten nicht mit Cygwin-Pfaden. Selbst wenn etwas funktioniert hat, konnte ich nicht herausfinden, wie die Tags auf GitHub angezeigt werden können (das Geheimnis ist --follow-tags).
Am Ende habe ich zwei kurze und einfache Skripte zusammengeschustert, die oben verlinkt sind, und es funktioniert großartig. Die Lösung muss nicht komplizierter sein!
quelle
Ich bin auf einem Windows-Computer und habe einen kleinen Stapel erstellt, um ein SVN-Repo mit Verlauf (aber ohne Verzweigungen) durch einfaches Aufrufen auf ein GIT-Repo zu übertragen
transfer.bat http://svn.my.address/svn/myrepo/trunk https://git.my.address/orga/myrepo
Vielleicht kann es jeder benutzen. Es erstellt einen TMP-Ordner, checkt dort das SVN-Repo mit git aus und fügt den neuen Ursprung hinzu und schiebt ihn ... und löscht den Ordner erneut.
Sie benötigen weiterhin die Datei users.txt mit Ihren Benutzerzuordnungen wie
quelle
Ich wollte nur meinen Beitrag zur Git-Community hinzufügen. Ich habe ein einfaches Bash-Skript geschrieben, das den vollständigen Import automatisiert. Im Gegensatz zu anderen Migrationstools basiert dieses Tool auf nativem Git anstelle von jGit. Dieses Tool unterstützt auch Repositorys mit einem großen Revisionsverlauf und / oder großen Blobs. Es ist über Github erhältlich:
https://github.com/onepremise/SGMS
Dieses Skript konvertiert in SVN gespeicherte Projekte im folgenden Format:
Dieses Schema ist auch beliebt und wird ebenfalls unterstützt:
Jedes Projekt wird nach Projektnamen synchronisiert:
Wenn Sie das vollständige Repo konvertieren möchten, verwenden Sie die folgende Syntax:
quelle
Die effektive Verwendung von Git mit Subversion ist eine sanfte Einführung in git-svn. Für vorhandene SVN-Repositorys macht git-svn dies sehr einfach. Wenn Sie ein neues Repository starten, ist es wesentlich einfacher, zuerst ein leeres SVN-Repository zu erstellen und dann mit git-svn zu importieren, als in die entgegengesetzte Richtung. Das Erstellen eines neuen Git-Repositorys und das Importieren in SVN ist möglich, aber es ist etwas schmerzhaft, insbesondere wenn Sie neu bei Git sind und hoffen, den Commit-Verlauf beizubehalten.
quelle
Laden Sie das Ruby-Installationsprogramm für Windows herunter und installieren Sie die neueste Version damit. Fügen Sie Ihrem Pfad ausführbare Ruby-Dateien hinzu.
Geben Sie dann "gem install svn2git" ein und geben Sie ein
Subversion-Repository migrieren
Öffnen Sie eine Ruby-Eingabeaufforderung und wechseln Sie in das Verzeichnis, in das die Dateien migriert werden sollen
Dann svn2git http: // [Domänenname ] / svn / [Repository-Stamm]
Die Migration des Projekts zu Git kann abhängig von der Größe des Projektcodes einige Stunden dauern.
Dieser wichtige Schritt hilft beim Erstellen der Git-Repository-Struktur, wie unten erwähnt.
SVN (/ Project_components) Trunk -> Git Master SVN (/ Project_components) Zweige -> Git verzweigt SVN (/ Project_components) Tags -> Git Tags
Erstellen Sie das Remote-Repository und übertragen Sie die Änderungen.
quelle
GitHub hat einen Importeur. Sobald Sie das Repository erstellt haben, können Sie es über seine URL aus einem vorhandenen Repository importieren. Gegebenenfalls werden Sie nach Ihren Anmeldeinformationen gefragt und von dort aus weitergeleitet.
Während der Ausführung werden Autoren gefunden, und Sie können sie einfach Benutzern auf GitHub zuordnen.
Ich habe es jetzt für ein paar Repositories verwendet, und es ist ziemlich genau und auch viel schneller! Es dauerte 10 Minuten für ein Repository mit ~ 4000 Commits und danach dauerte es vier Tage für meinen Freund!
quelle
Einige Antworten finden Sie hier unter https://github.com/nirvdrum/svn2git . Bei großen Repositorys kann dies jedoch langsam sein. Ich habe versucht, https://github.com/svn-all-fast-export/svn2git zu verwenden stattdessen ist ein Tool mit genau demselben Namen, das jedoch zum Migrieren von KDE von SVN nach Git verwendet wurde.
Etwas mehr Arbeit, um es einzurichten, aber als ich fertig war, dauerte die Konvertierung für mich Minuten, in denen das andere Skript Stunden verbrachte.
quelle
Es gibt verschiedene Methoden, um dieses Ziel zu erreichen. Ich habe einige davon ausprobiert und festgestellt, dass es wirklich funktioniert, wenn nur Git und SVN unter Windows installiert sind.
Voraussetzungen:
svnadmin dump /path/to/repository > repo_name.svn_dump
Schritte zum Erreichen des endgültigen Ziels (Verschieben Sie das gesamte Repository mit Verlauf in einen Git, zuerst einen lokalen Git, dann einen Remote-Git).
Erstellen Sie ein leeres Repository (mit Konsolentools oder tortoiseSVN) im Verzeichnis REPO_NAME_FOLDER
cd REPO_NAME_PARENT_FOLDER
und fügen Sie dumpfile.dump in REPO_NAME_PARENT_FOLDER einsvnadmin load REPO_NAME_FOLDER < dumpfile.dump
Warten Sie auf diesen Vorgang, er kann lang seinDieser Befehl ist stumm, also öffnen Sie das zweite cmd-Fenster:
svnserve -d -R --root REPO_NAME_FOLDER
Warum nicht einfach file: /// ...... verwenden? Ursache Der nächste Befehl schlägtUnable to open ... to URL:
dank der Antwort https://stackoverflow.com/a/6300968/4953065 fehlErstellen Sie einen neuen Ordner SOURCE_GIT_FOLDER
cd SOURCE_GIT_FOLDER
Was haben wir endlich?
Überprüfen wir unser lokales Repository:
Sehen Sie Ihre vorherigen Commits? Wenn ja - okay
Jetzt haben Sie ein voll funktionsfähiges lokales Git-Repository mit Ihren Quellen und dem alten SVN-Verlauf. Wenn Sie es jetzt auf einen Server verschieben möchten, verwenden Sie die folgenden Befehle:
In meinem Fall brauche ich keinen Befehl tags, weil mein Repo keine Tags hat.
Viel Glück!
quelle
Konvertieren des SVN-Submoduls / Ordners 'MyModule' in Git mit Verlauf ohne Tags oder Verzweigungen.
Um die svn-Ignorierliste beizubehalten, verwenden Sie die obigen Kommentare nach Schritt 1
quelle