Wie kann ich den SVN-Import-Zeilenende-Fehler beheben?

8

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.

    
xsl 23.04.2012, 10:57
quelle

7 Antworten

3

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 .

    
Mand Beckett 23.04.2012, 12:13
quelle
11

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%     
ventura10 02.04.2013 14:27
quelle
5

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.

%Vor%

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.

    
tangens 27.07.2013 21:13
quelle
4

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 :

zu erstellen %Vor%

Initialisieren Sie das Ziel-Repository für svnsync :

%Vor%

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 :

verwendet haben %Vor%

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:

Garret Wilson 16.08.2015 01:13
quelle
2

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)

    
user2236312 03.07.2013 13:44
quelle
2

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 .

    
ceilfors 16.04.2015 12:21
quelle
1

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):

  1. Downloaden und installieren Sie TortoiseSVN oder eine andere Software, die svn Befehlszeilen-Tools enthält. Ich hatte es bereits installiert
  2. Starten Sie cmd.exe , führen Sie svnserve -d aus. Dieses cmd-Fenster ist jetzt beschäftigt.
  3. starte ein anderes cmd.exe Erstelle ein Repo: svnadmin create d:\svn_repos\test12
  4. Laden Sie den Dump in den Repo: 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):

    
Tobias Knauss 24.10.2017 07:30
quelle

Tags und Links