2017-02-20 1 views
9

Angenommen, ich habe Datei A in Datei B mit Windows Explorer umbenannt und eine neue Datei C erstellt.Rückgängigmachen einer Reparaturbewegung in TortoiseSVN

In Tortoise SVN, verwende ich aus Versehen die "Repair Move" auf Datei A und C, statt A und B. Gibt es eine einfache Möglichkeit, die Reparatur rückgängig zu machen (und sie mit den richtigen Dateien wiederherzustellen)? Änderungen werden zu diesem Zeitpunkt nicht vorgenommen.

Die einzige Möglichkeit, die ich derzeit bewusst ist, ist das Zurücksetzen der löschen und hinzufügen, die Datei A wiederherstellen, dann manuell löschen Sie die Datei erneut und wiederholen Sie die Verknüpfungen korrekt. Bei mehreren Dateien birgt dies die Gefahr, dass lokale Änderungen versehentlich rückgängig gemacht werden. Daher interessiert mich, ob es einen besseren Weg gibt.

Hinweis: Obwohl TortoiseSVN verwendet wird, um das Problem zu erzeugen, ist eine Antwort mit Svn-Konsole auch akzeptabel. Hier


ist das Beispiel mit Dateien A.txt, B.txt und C.txt Schritt für Schritt:

Nach A-B umbenannt und C lokal

>svn st 
!  A.txt 
?  B.txt 
?  C.txt 

Nach Tortoise SVN „Repair Bewegung hinzugefügt "wird falsch angewendet A ->C

>svn st 
D  A.txt 
     > moved to C.txt 
?  B.txt 
A + C.txt 
     > moved from A.txt 

Mein Workflow, die Situation zu beheben, die ich mit nicht wirklich glücklich bin:

>ren C.txt C.txt.bak 
>svn revert C.txt A.txt 
>ren C.txt.bak C.txt 
>del A.txt 

in der Ausgangssituation Resultierend aus, wo ich

>svn st 
!  A.txt 
?  B.txt 
?  C.txt 

die Reparatur mit richtigen Dateien wiederherstellen kann

Was würde ich lieben, aber das scheint nicht zu existieren

svn mv --force --ignore-files A.txt B.txt 
svn add --force C.txt 

in eine Weise, dass es ignoriert, dass A bereits gelöscht markiert ist und einer Geschichte Transfer von A nach B ermöglichen, C so sauber Add neu zu interpretieren statt transfering Geschichte von A.

+0

Ich könnte es falsch verstehen, aber was Sie nicht tun möchten, ist die Änderungen aus dem Staging zu entfernen und dann manuell die Umbenennung zu beheben und dann das Stage-Commit durchzuführen. Ist das richtig? WENN es ist, was genau wäre die automatische Version dieses Prozesses - dh - wie willst du SVN sagen, was du eigentlich willst? –

+0

Noch ein paar Dinge - was ist eigentlich das Risiko? Würden Sie Daten/Arbeit verlieren, wenn Sie die falschen Dateien begehen? Über wie viele Dateien reden wir? –

+0

@LeftyGBalogh Ich hoffe irgendwie, dass es eine Möglichkeit gibt, den SVN-Zustand (zB 'deleted') rückgängig zu machen, ohne die Datei tatsächlich wiederherzustellen. Dies würde mir erlauben, die Assoziationen korrekt wiederherzustellen. Das Risiko besteht darin, dass ein inkonsistenter Zustand zwischen Projektmetadateien und Codedateien entsteht, der Versionsverlauf beschädigt wird oder lokale Änderungen verloren gehen. Wir reden über eine Sache, die mir in der Vergangenheit passiert ist und wahrscheinlich auch in Zukunft passieren wird. Ich kümmerte mich um vergangene Ereignisse, aber ich bin nicht zufrieden mit meinen Arbeitsabläufen. – grek40

Antwort

2

Es ist Art und Weise beteiligt 2 Befehle auf A. txt nur anstelle der 4 Befehle in Ihrem aktuellen Workflow (auch auf C.txt). Nach TortoiseSVN "Reparatur move" falsch angewendet wird, führen:

svn revert A.txt 
del A.txt 

svn stat sein wird:

!  A.txt 
?  B.txt 
A + C.txt 

Von Tortoise SVN können Sie jetzt "Reparatur move" zwischen A.txt und B.txt, was im richtigen Zustand:

D  A.txt 
     > moved to B.txt 
A + B.txt 
     > moved from A.txt 
A + C.txt 

gleiche Technik kann in TortoiseSVN UI (zufällt A.txt, dann A.txt aus dem Explorer löschen) verwendet werden. Der Grund dafür ist, dass der Verschiebezustand mit der fehlenden Datei und nicht mit der nicht versionierten Datei gekoppelt ist. Die einzige Änderung an C.txt ist, dass es mit dem Befehl repair move hinzugefügt wurde (den Sie wahrscheinlich trotzdem hinzufügen wollten).

Der „Repair move“ Befehl funktioniert nur, wenn genau zwei Dateien sind ausgewählt, eine der „fehlenden“ und die andere „Nicht-versioniert“ Status besitzen. Nur so kann TortoiseSVN herausfinden, welche Datei in die Datei umbenannt wurde.

https://tortoisesvn.net/repairmoves.html

nach dem Zurücksetzen & Löschen von A.txt Sie am Ende wieder mit einer fehlenden Datei (A.txt) und eine nicht-versioniert Datei (B.txt) nach oben, wie es vor der falschen angelegten Reparatur Bewegung. Sie können also die Reparatur zwischen diesen beiden Dateien erneut anwenden.

+1

Danke für Ihre Antwort. Dies verknüpft auch die Geschichte von 'A' mit' C', aber ich denke, ich frage nur nach einer einfachen Lösung für etwas, wo TortoiseSVN ziemlich viel Arbeit im Hintergrund (Repair Move) leistet und es nicht unterstützt einfache Lösung. Dieser zusätzliche Verlaufslink ist möglicherweise kein Problem. – grek40

+0

Ah, du hast recht - nachdem du 'C' begehst, bekommst du auch die Geschichte von' A'! Das ist seltsam, weil 'svn stat'' 'nicht von A.txt für die Datei' C' vor dem Commit in diesem Fall auflistet. Wie auch immer, ich bin froh, dass es hilfreich war. – Constantin