Rückwirkende Kopie / Zusammenführung

8

Manchmal kopiert ein Benutzer Dateien mit Windows Explorer und schreibt sie fest, wenn sie eine Kopie oder Zusammenführung auf SVN-Repository-Ebene hätten ausführen sollen. Daher hat SVN keine ordnungsgemäße Verfolgung dieser Änderungen. Sobald ich darüber informiert bin, ist der Schaden eindeutig bereits behoben und es hat möglicherweise viele spätere Änderungen an den fraglichen Dateien gegeben. Es ist wichtig, diesen Teil der Geschichte nicht zu verlieren. Gibt es etwas, was ich tun kann, um Dinge im Repository nachträglich zu verbessern, wenn ich herausfinde, dass diese Situationen eingetreten sind?

Genauer gesagt, habe ich zwei Szenarien, je nachdem, ob die Zieldatei bereits existiert oder nicht. Im ersten Szenario (1) führte der Benutzer einen Zusatz durch, der nicht als Kopie aufgezeichnet wurde. Im zweiten Szenario (2) führte der Benutzer eine Aktualisierung durch, die nicht als Zusammenführung aufgezeichnet wurde.

Außerdem wurden sowohl die Quell- als auch die Zieldatei nachfolgenden Aktualisierungen unterzogen, die ebenfalls festgeschrieben wurden. Manchmal wurden diese Nachbearbeitungen auch manuell und somit ohne die eigentliche Mergeinfo auf beiden Seiten durchgeführt.

MÖGLICHKEIT: Könnte manuell ein Mergeinfo-RevProp zur früheren Revisionshilfe hinzugefügt werden? Wenn ja, wie mache ich das? Bitte berücksichtigen Sie beide Szenarien.

    
Jason Kresowaty 29.05.2012, 17:49
quelle

3 Antworten

1

Hier sind die Szenarien, die ich mir vorstellen kann und wie ich sie lösen kann (falls möglich):

1) Die Dateien wurden kopiert und Änderungen wurden vorgenommen (an ihre ursprüngliche URL)

1a) wenn die Verzweigung noch nicht über diese Dateien verfügt:

  • svn-Kopiert die Dateien (oder deren einschließendes Verzeichnis) in den Zweig (dadurch wird ihr Verlauf erhalten)
  • Wenn es keine weiteren Änderungen an diesen spezifischen Dateien im Trunk gab, setzen Sie den Trunk für diese Dateien / das umschließende Verzeichnis auf die Revision direkt vor dem Kopieren zurück
  • Wenn es Änderungen im Stamm zu diesen Dateien gibt, können Sie die Änderungen, die zu der Verzweigung gehören, immer noch durch eine umgekehrte Zusammenführung erhalten: Dies sollte erfolgreich sein, es sei denn, einige der Änderungen überschneiden sich

1b) wenn die Verzweigung diese Dateien bereits enthält:

  • svn-füge die Änderungen des Trunks in den Zweig ein
  • gleiche Überlegungen für den Stamm wie in 1a)

2) Die Dateien wurden kopiert, Änderungen vorgenommen, aber nicht festgeschrieben (an ihre ursprüngliche URL, da die Kopie das nicht geändert hat)

Hinweis : Da die Änderungen noch nicht festgeschrieben wurden, gibt es keine zu speichernde Historie, auch nichts mit dem Stamm zu tun

2a) wenn die Verzweigung noch nicht über diese Dateien verfügt:

  • Erstellen Sie eine physische Kopie der schlecht kopierten Dateien / Verzeichnis
  • Löschen Sie den fehlerhaften Ordner aus der Arbeitskopie der Zweigstelle
  • kopiert / verschiebt das zuvor kopierte files / -Verzeichnis an die entsprechende Stelle in der Arbeitskopie der Zweigstelle
  • Fügen Sie die Dateien zum Zweig
  • hinzu

2b) wenn die Verzweigung diese Dateien bereits enthält:

  • Erstellen Sie eine physische Kopie der schlecht kopierten Dateien / Verzeichnis
  • Löschen Sie den fehlerhaften Ordner aus der Arbeitskopie der Zweigstelle
  • Aktualisieren Sie die Arbeitskopie der Zweigstelle
  • merge (*) die zuvor kopierten Dateien / Verzeichnisse mit ihren Gegenstücken in der aktuellen Arbeitskopie der Zweigstelle
  • zusammen
  • Fügen Sie die Dateien zum Zweig
  • hinzu

(*) Verwenden Sie ein beliebiges reguläres Zusammenführungswerkzeug für den Job, z. WinMerge

Update : Nach Ihrer Bearbeitung verstehe ich Ihre Situation besser (das obige war mit der Annahme, dass nach der manuellen Kopie die URL des kopierten Ordners immer noch auf den Stamm zeigte)

Sie könnten versuchen, svn propset --revprop -r <revision> snv:mergeinfo <updated mergeinfo> (falls nicht durch einen pre-revprop-change-Haken blockiert) in der Verzweigung zum "Reparieren" der Merge-Informationen zu verwenden, aber ich glaube, dass Sie auch alle nachfolgenden Versionen der Mergeinfo "reparieren" müssen da svn diese Informationen für einige seiner Operationen verwendet (z. B. Zusammenführungen); Auch wegen der letzteren müssen Sie sehr vorsichtig mit den aktualisierten Inhalten sein.

Eine bessere Option wäre meiner Meinung nach, das Protokoll bei der Revision des inkorrekten Commits in den Zweig zu aktualisieren, um die Revision des Trunks einzubeziehen, auf den sich die kopierten Dateien beziehen. Auf diese Weise sind die Informationen bei Bedarf verfügbar, aber es besteht kein Risiko, die zukünftigen Operationen von svn zu stören. Der große Nachteil dieses Ansatzes besteht darin, dass beim Zusammenführen der Verzweigung mit der Verbindungsleitung möglicherweise Konflikte auftreten, die gelöst werden müssen (da die Zusammenführungsinformationen nicht aktualisiert wurden). Der Befehl für diese Aktion lautet svn propset --revprop -r <revision> svn:log <updated log message>

    
Attila 15.06.2012 17:28
quelle
0

Unter der Annahme, dass die kopierte Datei nicht am neuen Speicherort hinzugefügt wurde, sollte ich zuerst Folgendes tun:

  1. Erstellen Sie eine Sicherungskopie der aktuellen WC-Datei (en), die verschoben wurden
  2. Machen Sie eine Repo Bewegung (um die Geschichte zu bewahren) der Dateien in # 1;
  3. svn up , um den WC in Zeile
  4. zu bekommen
  5. Stellen Sie sicher, dass die Datei (en) korrekt zusammengeführt wurden, und verwenden Sie die Sicherungen von # 1 nicht, um die Datei (en) zu synchronisieren.
  6. Commit und weitermachen
AlG 15.06.2012 13:59
quelle
0

Meine Lösung ist nicht technologisch. Ich denke eher, du musst deinen Leuten beibringen, dass sie etwas falsch machen und ihnen zeigen, wie man es richtig macht. Nichts, worüber man sauer werden könnte. Manchmal machen Leute (mich eingeschlossen) etwas Dummes, weil sie nicht erkannt haben, dass es einen besseren Weg gibt, oder weil sie den besseren Weg noch nicht verstanden haben.

Wenn das wirklich wiederkehrend ist, notieren Sie die Fehler und Erfolge. Tally die Ergebnisse auf einem Brett und machen es Spiel. Nimm keine Leute auf. Nach einiger Zeit wird das Problem abnehmen.

    
Philippe A. 17.07.2012 20:02
quelle

Tags und Links