Ich muss ein riesiges SVN-Repository importieren, das ich von einem Server auf einen anderen übertragen muss. Also habe ich es vom alten Server exportiert:
%Vor%und importierte es auf dem neuen:
%Vor%In der Mitte des Importvorgangs habe ich diesen Fehler erhalten:
%Vor%Wie kann ich das beheben? Ich habe die volle Kontrolle über beide Server.
Haben Sie die Serverversion geändert? Dies ist ein bekanntes Problem in 1.6 und verursacht Probleme beim Übergang von 1.4 oder 1.5.
Subversion 1.6 akzeptiert keine Wagenrücklaufzeichen (^ M) mehr in Eigenschaftendateien. Sie müssen die Zeilenumbrüche in Ihrer Datei svn: ignore korrigieren oder neu erstellen, wenn das einfacher ist.
Alternativ können Sie auch Subversion 1.7 verwenden oder UberSVN .
Sie haben 2 Optionen, reparieren die Quelle oder deaktivieren die Prop-Validierung.
Reparieren der Quelle (svn: log und svn: ignore) :
%Vor%Dabei ist ^ M ein Steuerzeichen, dh 0D in hex. Um es zu bekommen, benutze ^ V ^ M ( kontrolliere V control M ) statt ^ M (circumflex M oder control M)
Propvalidierung deaktivieren:
%Vor% Die erste Option der Antwort von @ ventura10 klang gut, aber funktionierte nicht für mich. Der sed
-Befehl hat einige versionierte Inhalte außerhalb des Eigenschaftsbereichs geändert, was dazu führte, dass md5 beim Laden des Dumps nicht übereinstimmte.
Da mein Repository keine Eigenschaften mit binärem Inhalt hat, habe ich den Befehl sed geändert, um alle Eigenschaften zu korrigieren, und nicht nur svn:log
und svn:ignore
. Ich war mir auch sicher, dass keine versionierte Datei eine Zeile enthielt, die mit Prop-content-length:
begann. Sonst hätte ich beim Laden des Dumps einen Fehler bekommen.
Es ist wichtig, ^M
durch [blank]
zu ersetzen, da sich die Größe des Eigenschaftswerts nicht ändern darf.
Der Hinweis von @ ventura10 ist immer noch gültig:
^ M ist ein Steuerzeichen, das bedeutet 0D in hex. Um es zu bekommen, benutze ^ V ^ M (Kontrolle V Kontrolle M) statt ^ M (Zirkumflex M oder Kontrolle M)
Es ist schwer zu glauben, dass ein Upgrade eines vorhandenen Repository von SVN 1.4 auf SVN 1.7 diesen Schritt notwendig macht, aber ich habe keine andere Möglichkeit gefunden, die seit svn 1.6 nicht mehr akzeptierten Wagenrückläufe zu entfernen.
Mit ein wenig Gymnastik kannst du das umgehen mit svnsync
, das die Fähigkeit hat, die EOLs zu reparieren. Angenommen, Ihr Repository wird in archive.svn
abgelegt.
Erstellen Sie zuerst das Repository, um den Repo zurück zu laden, und ignorieren Sie dabei die EOL-Probleme:
%Vor%Erstellen Sie nun ein neues Repository zum Kopieren in:
%Vor% svnsync
benötigt einige Pre-Commit-Hooks, auch wenn Sie sie nicht verwenden. Verwenden Sie also Ihren Editor, um ein leeres in repo-fixed/hooks/pre-revprop-change
:
Initialisieren Sie das Ziel-Repository für svnsync
:
Kopieren Sie nun das gesamte Repository über:
%Vor% Puh! svnsync
wird dir sogar eine gute Nachricht geben: NOTE: Normalized svn:* properties to LF line endings
(Warum das Subversion-Team svnadmin
nicht aktualisiert hat, um die gleiche Normalisierung durchzuführen, ist mir ein Rätsel.)
Sobald das erledigt ist, dump das neue Repository:
%Vor% Sie haben jetzt archive-fixed.svn
, das mit archive.svn
identisch sein sollte, außer dass die EOLs nach Bedarf festgelegt wurden.
(Optional) Sie können jetzt das temporäre Repository entfernen, das Sie für svnsync
:
Update Es stellt sich heraus, dass Ihr Subversion-Client einen Fehler erhält, wenn Sie diesen neuen Dump laden: Repository UUID does not match expected UUID
. Sie müssen svnadmin setuuid ...
verwenden, um die UUID-ID so zu ändern, wie sie früher war .
(Dieser Beitrag ist ein Höhepunkt einer Vielzahl von Schnipsel und Teillösungen, die ich im Internet gefunden habe. Danke an alle Leute, die mehr wussten als ich, ich habe alles zusammengefügt.)
Siehe auch:
Ich habe diesen Fehler beim Upgraden eines 1.6 Repo auf 1.8 festgestellt. Ich habe eine Reihe von "Fixes" im Netz gefunden.
Die - Umgehung-Prop-Validierung hat mich nicht angesprochen, weil sie das Problem aufschiebt. Wenn Sie das Repo das nächste Mal wiederherstellen müssen, stoßen Sie auf dasselbe Problem.
Ich habe ein Bash-Skript gefunden, um die Revisionen durchzugehen und die Kommentare zu bekommen und sie erneut zu setzen, aber das hat nicht funktioniert.
Eine Verbesserung der Lösung von ventura10 hat die Aufgabe erfüllt. Wegen der Größe des Dumps habe ich den einzigen Befehl benutzt, um die unerwünschten Zeichen zu entfernen, während ich den Dump wiederherstelle
%Vor%HINWEIS:
Wo ^ M ist ein Steuerzeichen, das bedeutet 0D in hex. Um es zu benutzen ^ V ^ M (Kontrolle V Kontrolle M) statt ^ M (Zirkumflex M oder Kontrolle M)
Verwenden Sie svndumptool :
%Vor%@tangens Lösung funktioniert auch für mich, aber es ist nicht perfekt, da ich ein zusätzliches Leerzeichen als Ersatz für die Wagenrücklaufzeichen erhalte. Ich habe jedoch getestet, dass das svn: ignore immer noch mit diesem zusätzlichen Speicherplatz funktioniert, aber ich habe die anderen SVN-Eigenschaften nicht getestet.
Der Nachteil des svndumptool ist, dass es nur mit einer svn-Eigenschaft gleichzeitig arbeiten kann, was bei großen Dump-Dateien sehr zeitaufwendig ist.
Einige Ergebnisse
Sie könnten neugierig sein, warum @tangens das ^ M nicht durch ein leeres Zeichen ersetzt hat. Wenn Sie versuchen, es durch ein leeres Zeichen zu ersetzen, erhalten Sie diesen Fehler:
%Vor% Die Dump-Datei speichert Prop-content-length
-Eigenschaft, die mit dem Inhalt des tatsächlichen Inhalts der Eigenschaft verglichen wird. Ersetzen von ^ M zu einem leeren Zeichen reduziert die Länge des Eigenschaftsinhalts, daher der Fehler.
svndumptool ändert Prop-content-length
bzw. Content-length
.
Ich habe gerade eine Svn-Dump-Datei erfolgreich repariert. Es hatte auch eine CRLF in den Eigenschaften, die eine Ausnahme im SVN Edge-Dump-Import verursacht (sie haben eine wirklich schlechte Import-Routine). Dann habe ich svnserve zum Testen installiert, was viel einfacher war als erwartet (Anleitung für Windows OS):
cmd.exe
, führen Sie svnserve -d
aus. Dieses cmd-Fenster ist jetzt beschäftigt. cmd.exe
Erstelle ein Repo: svnadmin create d:\svn_repos\test12
svnadmin load d:\svn_repos\test12 < d:\temp\svn\backup_test.dump
svnserve gibt Ihnen detaillierte Informationen darüber, was fehlgeschlagen ist.
Und hier ist, was Sie reparieren müssen (Original auf der linken Seite, repariert auf der rechten Seite):
Tags und Links svn import line-endings