Synchronisierung

Synchronisierung

It’s very easy to synchronize your Git repository with new commits in the original SVN repository. This makes for a comfortable transition period in the migration process where you can continue to use your existing SVN workflow, but begin to experiment with Git.

It’s possible to synchronize in both directions. However, we recommend a one-way sync from SVN to Git. During your transition period, you should only commit to your SVN repository, not your Git repo. Once you’re confident that your team is ready to make the switch, you can complete the migration process and begin to commit changes with Git instead of SVN.

Git migration: we recommend a one-way sync from SVN to Git.

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.

Update the authors file

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 <path-to-authors-file>

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.txthinzufü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.

Automatically generating Git authors

If your authors file doesn’t need to be updated, you can skip to the next section.

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 <email> (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.txtnicht zu finden sind:

echo "$1 <$1@example.com>"

Again, this will only generate a dummy name and email based on the SVN username, so feel free to alter it if you can provide a more meaningful mapping.

Fetch the new SVN commits

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

Synchronize with the fetched commits

To apply the downloaded commits to the repository, run the following command:

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.

Clean up the Git repo (again)

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

Your local Git repository should now be synchronized with your SVN repository.

Summary

During this transition period, it’s very important that your developers only commit to the original SVN repository. The only time the Git repository should be updated is via the synchronization process discussed above. This is much easier than managing a two-way synchronization workflow, but it still allows you to start integrating Git into your build process.

Du möchtest mit Git arbeiten?

Sieh dir dieses interaktive Tutorial an.

Jetzt loslegen