Verknüpfen Sie die umbenannte Datei mit der "gelöschten" Datei im vorherigen Commit

698
Graham

Das ist wahrscheinlich schon gefragt worden, und ich würde mich sehr freuen, wenn jemand ein passendes Duplikat findet. Bitte lesen Sie die Frage sorgfältig durch, bevor Sie sie als Duplikat markieren.

Vor einiger Zeit habe ich versehentlich einen Dateisatz umbenannt, ohne die Dateien in TortoiseSVN ordnungsgemäß umzubenennen . Anstatt die gelöschten Dateien mit ihren Umbenennungen zu verknüpfen, habe ich ein Commit durchgeführt, bei dem die Dateien einfach gelöscht und andere hinzugefügt wurden. Jetzt möchte ich die Zuordnung zwischen den beiden Dateien korrigieren, sodass der vorherige Verlauf im Protokoll für diese Datei angezeigt wird. Ich habe eine gewisse Vorstellung, dass ein revert helfen kann, aber ich bin zugegebenermaßen etwas unwissend, wie kehrt Arbeit in TortoiseSVN, und sie können nicht wirklich die Lösung sein.

Zur Klarstellung möchte ich:

  • Benennen Sie die Dateien um, so dass der SVN Tortoise logihren bisherigen Verlauf enthält
    • Ich bin mir bewusst, dass dies ein mehrstufiger Prozess sein kann, und ich verstehe im Allgemeinen, dass der Prozess in etwa wie folgt aussehen würde:
      1. Machen Sie die Änderungen rückgängig
      2. Benennen Sie die Dateien richtig um
      3. Holen Sie sich die Änderungen im Commit seit dem Original zurück
        • Bei diesem bestimmten Vorgang bin ich nicht sicher, wie er Schritt 3 richtig handhabt. Im Idealfall würde jedes meiner alten individuellen Commits auf dieselbe Weise in denselben Dateien gespeichert werden, aber ich weiß nicht, wie das geht. Oder vielleicht bin ich falsch, und ich sollte wirklich den Inhalt des letzten Commit nehmen und ihn als nächsten Commit zu diesen Dateien hinzufügen.

Hinweis: Ich habe bereits auf die folgenden Links verwiesen, und obwohl ich hilfreich war, gab ich keine direkte Antwort auf meine Frage:

0
Ich bin nicht sicher, worum es in Ihrer eigentlichen Frage geht: Wie machen Sie das, was Sie wollen, oder ob es überhaupt möglich ist? Da Ihr Betreff nicht möglich ist, können Sie die beiden Änderungen rückgängig machen und die Dateien nicht umbenennen. Aber Sie haben das selbst am Ende schon erwähnt. Thorsten Schöning vor 5 Jahren 0
@ ThorstenSchöning Entschuldigung für den Mangel an Klarheit. Ich habe meine Frage bearbeitet. Ich versuche zu vermeiden, eine XY-Frage zu stellen. Graham vor 5 Jahren 1

1 Antwort auf die Frage

0
Thorsten Schöning

In Bezug auf Schritt 3 glaube ich, dass Sie beides tun können, was Sie erwähnt haben. Für die Rückgabe einzelner Commits ist jedoch eine Verzweigung erforderlich: Verzweigen Sie Ihren aktuellen Trunk, setzen Sie ihn zurück, bevor Sie ihn löschen / hinzufügen, machen Sie eine korrekte Umbenennung, Merge + Commit jedes Commit von Interesse für Ihren Trunk in Ihren Zweig, einen Zweig mit Ihrem Trunk. Dies führt dazu, dass ein Commit nur in trunk einschließlich aller Änderungen ausgeführt wird. SVN kann jedoch Ihre früheren individuellen Commits während blameusw. unterscheiden.

Sie können dasselbe für Trunk tun, indem Sie einfach die gewünschten Dateien nach dem richtigen Umbenennen mit dem Inhalt überschreiben, den Sie vor dem Zurücksetzen hatten. Entweder mit allen Änderungen einzeln oder nur mit dem neuesten Status der Datei. Das hängt davon ab, was Sie möchten. Denken Sie daran, dass SVN Ihre früheren individuellen Commits immer im Verlauf des übergeordneten Verzeichnisses enthalten wird. Daher ist es möglicherweise nicht erforderlich, jedes dieser Elemente für Ihre konkreten interessierenden Dateien zurückzuholen.

Am Ende können Sie all diese Ansätze ganz einfach ausprobieren, indem Sie einfach Zweige Ihres aktuellen Trunks erstellen und sich ansehen, wie Protokolle für einzelne Dateien, deren übergeordnete Verzeichnisse usw. vor / nach dem Anwenden von Änderungen aussehen. Sie können sich jetzt nicht mehr um die korrekte Umbenennung kümmern, sondern nur noch die einzelnen Commits, die Sie nur für die neuen Dateien haben. Am Ende haben Sie sie aus einem bestimmten Grund umbenannt. Wie wahrscheinlich ist es, dass Sie sich in Zukunft für den alten Status interessieren?

Um die Sache noch komplizierter zu gestalten, können Sie das aktuelle Repo sogar auf diese Revision ausgeben, bevor Sie es löschen / hinzufügen, und es als neue Basis verwenden, mit der richtigen Umbenennung und Anwendung einzelner Änderungen, um es erneut zu bestätigen. Auf diese Weise hätten Sie keine alten Commit-Nachrichten mehr und eine sehr saubere Geschichte. Denke nicht, dass es das wert ist.