2009-07-28 10 views
17

Als mein Team zuerst mit SVN anfing, haben wir alle unsere Vornamen verwendet, als wir uns dem Repository verschrieben haben. Jetzt, da unser Team gewachsen ist, bekommen wir Probleme, weil wir gerade eine zweite Mike eingestellt haben.Gibt es eine Möglichkeit, den Benutzernamen eines SVN-Benutzers über den gesamten Repository-Verlauf zu ändern?

Wir möchten die Benutzernamen aller Benutzer so ändern, dass sie dem Benutzernamen auf ihrem Computer entsprechen (Vorname Vorname + Nachname). Das Problem, das ich sehe, ist, dass der SVN-Verlauf immer noch die alten Benutzernamen bei den Commits zeigt.

Gibt es ein Tool zum Ändern von Benutzernamen während des gesamten Verlaufs eines Repositorys?

Zum Beispiel, ich würde jeder gerne verpflichten, dass derzeit an Mike zugeschrieben wird msmith zu ändern, den ganzen Weg zurück bis zur Revision 1.

Mein erster Gedanke ist, dass ich zu werde einige Parsing und Verarbeitung tun auf einer Dump-Datei, aber ein Tool wäre nett.

+2

Haben Sie versucht, Mike umzubenennen? – Draemon

+4

Wir haben uns tatsächlich für eine kurze Zeit auf ihn als Phil ... –

+1

Gern geschehen, wenn es nur ein Scherz war ... –

Antwort

2

Es dauerte eine Menge zu suchen, aber ich fand schließlich ein Perl-Skript, das gegen eine SVN-Dump-Datei funktioniert.

Ich versuchte es heute Morgen auf einem Dump meines Repository und es funktionierte einwandfrei.

Here is the direct link

-2

Aus dem Speicher, die Standard-SVN-Antwort, um etwas in der Geschichte zu ändern, ist eine Text-Dump der Datenbank zu tun, suchen-ersetzen durch und erstellen Sie die Datenbank neu daraus.

Aber ich habe nicht wirklich an den Interna von SVN seit seinen 0.x-Tagen sehe, so könnte ich dran ...

11

ja, es gibt:

svn propset --revprop -r revision_number svn:author new_username 

jedoch svn Revisionseigenschaften können standardmäßig nicht geändert werden. Sie müssen dafür einen pre-revprop-change hook script einrichten. Unter Windows genügt es, eine Fledermaus-Datei in dem Haken Ordner Ihres Repository zu setzen, die einfach eine Zeile enthält:

exit 0 

dass eingerichtet Wenn sollten Sie in der Lage sein, einen Skript für Ihre Bedürfnisse zu schreiben.

EDIT: Ich habe testen dies nicht durch, aber ich denke, das ist der Trick in Powershell tun sollten:

([xml] (svn log --xml)).log.logentry 
    | ? {$_.author -eq "Mike"} 
    | foreach {svn propset --revprop -r $_.revision svn:author msmith} 
+2

svnadmin kommt um das Haken Problem – Greg

3

In Thunder Below, die Geschichte von der USS Barb im Zweiten Weltkrieg, ein neuer Offizier kommt an Bord. Der Kapitän fragt ihn nach seinem Namen. "Mike", antwortet er. "Nein, wir haben schon einen Mike", sagt der Captain. "Wir nennen dich Robert. Im Kampf, wenn ich Befehle rufe, kann es keine Verwirrung darüber geben, mit wem ich rede."

Worauf ich hinaus will ist, dass es einen Präzedenzfall dafür gibt, dass dein neuer Mike einen anderen Namen wählt.

20

können Sie svndumptool verwenden:

svnadmin dump path/to/my/repo> repo.dump

svndumptool transformations revprop svn: author originalregexp newvalue repo.dump newrepo.Dump

+0

Ich war ein Paket von einem privaten verschieben Repo zu Community Repo, wo die Benutzer verschiedene Autornamen hatten. Ich habe Svndumptool benutzt und es hat perfekt funktioniert. – claytron

12

TortoiseSVN eine hervorragende Unterstützung für diese Funktion hat: innerhalb seiner Revision Log Dialog einen nach dem Autor filtern (auch über reguläre Ausdrücke), wählen Sie Revisionen aus der gefilterten Liste als (in der Regel alle wie in dieser Frage) gewünscht und wählen Sie ‚Bearbeiten Autor 'aus dem Kontextmenü.

Die Vorbedingung, einen pre-revprop-change hook an Ort und Stelle zu haben, wie in jeroenhs answer erwähnt, gilt natürlich immer noch.

Die Verarbeitung ist eher langsam, aber je nach diejenigen, muss dies noch viel schneller sein könnten und/oder bequemer dann ein ganzes Repository-Dump mit und verarbeiten diese potenziell große Dump-Datei (en) mit Skripten.

6

auf dem Repository-Server können Sie:

echo -n "msmith" > msmith.txt 
svn log /svn -q | grep Mike | cut -f 1 -d' ' | xargs -n1 svnadmin setrevprop /svn svn:author msmith.txt -r 

Hier ist, was das tut:

  1. Lagern Sie den neuen Benutzernamen in einer Datei ohne Newline am Ende (echo -n)
  2. Ruft das vollständige Protokoll für das Repository in/svn ab und zeigt nur die Zusammenfassungsinformationen (nicht die Protokollnachricht) an (svn log -q)
  3. Suchen Sie nach Zeilen mit Mike (grep)
  4. Filter alles außer dem ersten Feld (die Revision #) (Schnitt)
  5. Führen Sie einen Svnadmin-Befehl für jede Revision in Schritt 4 (xargs) gefunden. Übergeben Sie nur eine Revision pro Ausführung des Befehls (-n1). Dadurch wird die Eigenschaft svn: author durch den Inhalt der Datei msmith.txt ersetzt.
+0

Dies ist die beste Antwort! – gecco

Verwandte Themen