Zuordnung zwischen Git-Committern und SVN-Benutzern

Lesezeit: 3 Minuten

Ich verwende git-svn, um eine “Staging”-Version eines SVN-Repos zu speichern, in der andere Benutzer aus diesem Staging-Repo ziehen und dort Änderungen zurückschreiben dürfen, dann werden die Commits im Staging-Repo regelmäßig im Upstream festgeschrieben SVN-Repository.

Ich möchte wissen, ob es eine Möglichkeit gibt, die Namen der Git-Committer und die SVN-Benutzernamen zuzuordnen, damit ihre Informationen bei der Rückkehr zum SVN-Repo intakt bleiben.

Benutzer-Avatar
VonC

Vinzenz Danen erwähnt die Option -A bei Verwendung von git svn:

Verwenden Sie also ~/git als Verzeichnis der obersten Ebene für Git-Repositories [...] Erstellen Sie eine authors.txt-Datei.
Diese Datei ordnet die Namen von Subversion-Committern Git-Autoren zu, was zu einem korrekten Verlauf des importierten Subversion-Repositorys führt.
Für Projekte mit einer kleinen Anzahl von Committern ist dies recht einfach. Bei größeren Projekten mit vielen Committern kann dies einige Zeit in Anspruch nehmen. Die Syntax der Datei wäre:

user = Joe User <[email protected]>
vdanen = Vincent Danen <[email protected]>

Der Kurzname ist der Committer-Name für Subversion, während die Langform der vollständige Name und die E-Mail-Adresse des Benutzers sind, wie sie von Git verwendet werden.

Der letzte Schritt besteht darin, das Subversion-Repository zu klonen, das darauf basierend ein lokales Git-Repository erstellt. Angenommen, Ihr Repository verwendet die Standards /trunk, /tags und /branches, verwenden Sie:

# git svn clone --no-metadata -A authors.txt -t tags -b branches -T trunk https://svn.example.com/svn/repo

-A<filename>
--authors-file=<filename>

Die Syntax ist mit der von git-cvsimport verwendeten Datei kompatibel:

loginname = Joe User <[email protected]>

Wenn diese Option angegeben ist und git-svn auf einen SVN-Committer-Namen trifft, der nicht in der Autorendatei existiert, bricht git-svn die Operation ab.
Der Benutzer muss dann den entsprechenden Eintrag hinzufügen.
Wiederholen des vorherigen git-svn Befehl, nachdem die Autorendatei geändert wurde, sollte den Betrieb fortsetzen.

config key: svn.authorsfile

Das sollte für alle funktionieren git-svn Befehle, inkl git-svn dcommit (beim drücken zu SVN) (Hinweis: Ich habe es aber nicht direkt getestet).

Mohammed Gamal berichtet (in den Kommentaren), dass es funktioniert, aber ohne das --no-metadata Möglichkeit.

  • @Christoph: übrigens du tun einen SVN-Spiegel eines Git-Repos haben ( stackoverflow.com/questions/570945/git-clone-of-git-svn-tree/… ). Mussten Sie jemals die Option –authors-file verwenden?

    – VonC

    24. März 2009 um 16:20 Uhr

  • Es funktioniert bei mir nicht – alle Commits werden als Benutzer dcommitted Wurzel zum SVN. Obwohl ich die verwende file: Schema, bemerkte ich, dass Sie verwenden https:. Welche Authentifizierungsmethode verwenden Sie in Apache, die das Setzen von svn:author erlaubt?

    – AndreKR

    20. Juni 2013 um 1:56 Uhr

  • Weder -A noch –authors-file funktionieren mit der GitHub für Windows-Version dieser Tools. Wenn Sie eine von beiden versuchen, wird “Unbekannte Option: A” bzw. “Unbekannte Option: Autorendatei” zurückgegeben.

    – Tom Lint

    28. Juni 2015 um 14:37 Uhr

  • @TomLint GitHub für Windows? Ich würde es nicht wissen. Dies soll mit Git für Windows verwendet werden (github.com/git-for-windows/git), wie das neueste Git 2.4.4 (github.com/git-for-windows/git/releases)

    – VonC

    28. Juni 2015 um 14:40 Uhr

eine zweite Möglichkeit besteht darin, ein Programm/Skript bereitzustellen, das das Mapping löst.

Sehr nützlich, wenn die Anzahl der Committer unbekannt ist, aber möglicherweise aus dem SVN-Committer-Namen “generiert” wird!

Wenn … der SVN-Committer-Name nicht in der Autorendatei existiert, bricht git svn die Operation ab. Der Benutzer muss dann den entsprechenden Eintrag hinzufügen. Den vorherigen git svn-Befehl erneut ausführen, nachdem die Autorendatei geändert wurde …

also, dafür haben wir:

--authors-prog=mapMyCompanyUsers.sh

Um nicht jeden Benutzer zwingen zu müssen, zuerst das Kartenskript auszuchecken / zu kräuseln / abzurufen, könnten Sie Folgendes bereitstellen:

$(tmpMapFile="$TMPDIR/mapSvnUsersAutomatically.$$.sh" && echo -e '#!/bin/sh\necho $1" <"$1"@example.com>"' > $tmpMapFile && chmod +x $tmpMapFile && echo $tmpMapFile)

Der Klon sieht so aus:

$ git svn clone -s --authors-prog=$(tmpMapFile="$TMPDIR/mapSvnUsersAutomatically.$$.sh" && echo -e '#!/bin/sh\necho $1" <"$1"@example.com>"' > $tmpMapFile && chmod +x $tmpMapFile && echo $tmpMapFile) https://svn.example.com/svn/repo/

Dies erzwingt, dass alle Mappings genau gleich sind und SVN-Klone könnten “geteilt” und über Git zusammengeführt werden!

1217290cookie-checkZuordnung zwischen Git-Committern und SVN-Benutzern

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy