Synchronize Git repositories
Es ist sehr leicht, dein Git-Repository mit neuen Commits im Original-SVN-Repository zu synchronisieren. Das macht die Übergangsphase im Migrationsprozess einfach, in der du weiterhin deinen bestehenden SVN-Workflow verwenden kannst aber langsam damit anfangen kannst, mit Git zu experimentieren.
Es ist möglich, in beide Richtungen zu synchronisieren. Wir empfehlen jedoch eine monodirektionale Synchronisierung von SVN zu Git. Während der Übergangsphase solltest du dich nur auf dein SVN-Repository festlegen, nicht das Git-Repository. Wenn du dir sicher bist, dass dein Team zur Umstellung bereit ist, kannst du den Migrationsprozess abschließen und anfangen, Änderungen mit Git anstatt SVN zu bestätigen.
In der Zwischenzeit solltest du dich auf dein SVN-Repository festlegen und dein Git-Repository bei Bedarf immer synchronisieren. Dieser Prozess ist mit der Convert-Phase -Phase vergleichbar, aber da du es nur mit inkrementellen Änderungen zu tun hast, sollte es effizienter sein.
Die Autoren-Datei aktualisieren
Die Datei authors.txt,
die wir zum Zuordnen von SVN-Benutzernamen mit vollständigen Namen und E-Mail-Adressen heranziehen, ist sehr wichtig beim Synchronisierungsprozess. Diese wurde vom Speicherort ~/GitMigration/authors.txt
, den wir bisher verwendet haben, verschoben. Du musst den Speicherort aktualisieren mit:
git config svn.authorsfile
Wenn neue Entwickler seit der letzten Synchronisierung (oder erstem Klonen) ein Commit auf das SVN-Repository durchgeführt haben, muss die Autoren-Datei entsprechend aktualisiert werden. Du kannst das vornehmen, indem du neue Benutzer manuell zu authors.txt
hinzufügst oder du kannst die Option --authors-prog
verwenden, die im nächsten Abschnitt besprochen wird.
Für One-Off-Synchronisierung ist es oft leichter, die Autoren-Datei direkt zu bearbeiten; die Option ---authors-prog
ist jedoch bei Durchführung nicht überwachter Synchronisierungen (d. h. bei einer planmäßigen Aufgabe) vorzuziehen.
Zugehöriges Material
Verschieben eines vollständigen Git-Repositorys
Lösung anzeigen
Git kennenlernen mit Bitbucket Cloud
Git-Autoren automatisch generieren
Wenn deine Autoren-Datei nicht aktualisiert werden muss, kannst du zum nächsten Abschnitt übergehen.
Der Befehl git svn
enthält die Option --authors-prog
, die auf ein Skript zeigt, das SVN-Benutzernamen automatisch zu Git-Autoren transformiert. Du musst dieses Skript konfigurieren, um den SVN-Benutzernamen als dessen einziges Argument zu konfigurieren und eine einzige Zeile in Form von Name
(genau wie die rechte Seite der vorhandenen Autoren-Datei) zurückzugeben. Diese Option kann sehr nützlich sein, wenn du von Zeit zu Zeit neue Entwickler zu deinem Projekt hinzufügen müssen.
Wenn du die Option --authors-prog
verwenden willst, erstelle eine Datei mit der Bezeichnung authors.sh
option in ~/GitMigration
. Füge folgende Zeile zu authors.sh
hinzu, um einen Dummy-Namen und eine E-Mail für alle Autoren zu erhalten, die in authors.txt
nicht zu finden sind:
echo "$1 <$1@example.com>"
Nochmal, das generiert nur einen Dummy-Namen und eine Dummy-E-Mail basierend auf dem SVN-Benutzernamen. Du kannst diese also gerne ändern, wenn du eine aussagekräftigere Zuweisung bieten kannst.
Die neuen SVN Commits abrufen
Im Gegensatz zu SVN unterscheidet Git zwischen dem Download von Upstream Commits und deren Integration in das Projekt. Das erste wird „Fetching“ (oder „Abrufen“) genannt, das letztere kann über Merging oder Rebasing erfolgen. Im Verzeichnis ~/GitMigration
musst du den folgenden Befehl ausführen, um neue Commits vom Original-SVN-Repository abzurufen.
git svn fetch
Das ist mit dem Befehl git svn clone
von der früheren Phase insofern vergleichbar, als dass dieser nur die Remote-Branches des Git-Repository aktualisiert – die lokalen Branches zeigen noch keine Aktualisierungen. Deine Remote-Branches sollten andererseits exakt des Verlaufs deines SVN-Repository entsprechen.
Wenn du die Option --authors-prog
verwendest, musst du den obigen Befehl mit einschließen, und zwar so:
git svn fetch --authors-prog=authors.sh
Mit den abgerufenen Commits synchronisieren
Um die heruntergeladenen Commits im Repository anzuwenden, musst du den folgenden Befehl ausführen:
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar sync-rebase
Das führt zu einem Rebase der abgerufenen Commits auf deinen lokalen Branches, damit diese ihren remoten Gegenstücken entsprechen. Du solltest jetzt die neuen Commits jetzt in git log
sehen können.
Git Repository (erneut) bereinigen
Es lohnt sich immer, das Skript git-clean
nochmals auszuführen, um alle veralteten Tags oder Branches zu entfernen, die vom Original-SVN-Repository seit der letzten Synchronsierung gelöscht wurden:
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force
Dein lokales Git-Repository sollte jetzt mit deinem SVN-Repository synchronisiert sein.
Zusammenfassung
In dieser Übergangsphase ist es sehr wichtig, dass deine Entwickler nur auf das Original-SVN-Repository Commits ausführen. Das Git-Repository sollte nur über den oben besprochenen Synchronisierungsprozess aktualisiert werden. Das ist viel einfacher, als einen bidirektionalen Synchronisierungs-Workflow zu managen, ermöglicht aber dennoch, dass du mit der Integrierung von Git in deinen Build-Prozess beginnen kannst.
Diesen Artikel teilen
Nächstes Thema
Lesenswert
Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.