Frage

messed ich auf meiner SVN-Repository und jetzt muß das gesamte Repository von Revision 28-24 zurückkehren und will nicht mit diffs oder Konflikten zu bewältigen. Gibt es eine schnelle und einfache Möglichkeit, dies zu tun? Ich habe in der Lage einzelne Dateien vor gut mit dem merge-Befehl wieder zurück -. Aber in diesem Fall will sie 28 alle Dateien zurück in das Repository von Revision hinzuzufügen, wenn alles, was ich wirklich tun möchte, sie ist gelöscht

Ich bin mit dem Befehlszeile auf einer Linux-Box (bash).

Danke

Bearbeiten

Vielen Dank für all die Hilfe! Ich reparierte sie durch:

svnadmin create /svnroot/<repo>.fixed
svnadmin dump -r 1:24 /svnroot/<repo> --incremental > dump.svn
svnadmin load /svnroot/<repo>.fixed < dump.svn

Dann die alte Repo in einem Backup-Ordnern setzen und die repo.fixed zu Repo bewegen.

Danke nochmal!

War es hilfreich?

Lösung

Überprüfen Sie heraus svnadmin dump / load. Es erstellt eine Textdatei mit jeder Version der Dateien. Es kann möglich sein, alles über / unter einem bestimmten Punkt zu löschen und wieder importieren.

Siehe zum Beispiel Migration Repository-Daten woandershin

Andere Tipps

Ein „umgekehrter“ merge kann sein, was Sie brauchen. Siehe "Änderungen rückgängig machen" Abschnitt von svn Buch.

z.   svn merge -r 28:24 [Pfad zu Svn]

Wenn Sie wirklich wischen müssen ‚Beweis‘, dass die Dateien überhaupt existiert, müssen Sie die svndump / svnload oben beschriebenen Aktionen tun.

In einer ‚normalen‘ Situation, in der Sie einen Fehler gemacht hat, müssen Sie Umkehrdruck verwenden. Diese stellen sicher, dass die Änderungen nach r24 Verhängnis auch rückgängig gemacht werden können, diffed, etc.

Der folgende Befehl sollte funktionieren, um die Änderungen rückgängig zu machen (das Ergebnis der Zusammenführung verpflichten, müssen die Zusammenführung im Repository reflektieren)

svn merge -r 28:24

Wenn Sie den Zugriff auf den SVN-Server haben, können Sie einfach path/db/current bearbeiten, legen Sie die alte Version Nummer, die Sie wiederherstellen möchten (hier: 24) gibt, und entfernen Sie nicht mehr benötigte Revisionsdateien (dh 25, 26, 27, 28) von path/db/revs/0/. Wenigstens funktionierte dies heute für mich, nachdem ich ein Verzeichnis im Repository versehentlich entfernt hatte.

Wenn Sie nicht über Administratorrechte in Anspruch nehmen, dann können Sie keine alten Versionen auslöschen aber man kann sie immer noch sehr gut verstecken mit nur einem erstaunlich einfachen „Svn kopieren“ -Befehl (Nickf und JesperE dies bereits erwähnt, aber in einer eher kryptischen Art und Weise)

  

svn löschen Protokoll: // svnserver / some / Ressource
  svn copy Protokoll: // svnserver / some / Ressource @ 24 Protokoll: // svnserver / some / Ressource

Und das ist es, Revisionen 25 bis 28 vollständig aus dem SVN log verschwunden. Es ist kein Hack überhaupt, es ist eine sichere und (kaum ...) dokumentierte Funktion.

Wenn „Ressource“ ist ein Verzeichnis, dann müssen Sie es aus der letzten URL Streifen:

  

svn copy Protokoll: // svnserver / some / directory @ 24 Protokoll: // svnserver / some /

(sonst würden Sie es in sich selbst kopieren)

Für jedermann mit TortoiseSVN, die Lösung ist einfach:

  • Ansicht Änderungsprotokoll
  • Rechtsklick auf die Revision, die Sie zurück rollen wollen ...
  • ... wählen Sie "zu dieser Version zurück"
  • verpflichten Änderungen

Diese Methode bewahrt die Versionsgeschichte (das heißt alle Revisionen, die Sie rückgängig gemacht).

Sie können eine neue Kasse von einer bestimmten Revision tun. http://svnbook.red-bean.com/en/1.1/re04. html

svn co path/to/my/repo -r 24

Wenn Sie wirklich vollständig Dateien entfernen möchten, aus dem Repository, müssen Sie eine svndump in eine Datei zu tun, die Drehzahl herauszufiltern und / oder Dateipfade Sie nicht wollen, eine neue Repo machen, und svnload den gefilterten Dump in das neue Repository. Sie wollen sorgfältig den SVN Buchabschnitt auf Repository-Wartung lesen bevor Sie irgendetwas davon tun, und stellen Sie sicher, dass Sie die vorhandene Repo nicht entfernen, bis Sie die neue sind sicher, wollen das Zeug Sie hat.

Wenn die Ordnerstruktur der Anwendung nicht geändert hat, Check-out die alte Version und ersetzen Sie die .svn Ordner aus der letzten Revision in die alte Revision ausgecheckt. Jetzt können Sie die „ältere“ Version begehen.

Ich hasse es zu sagen, aber das ist eine Situation, wo ich gefunden habe ich Backups meiner SVN-Repository verwenden.

Können Sie das Kopieren von Dateien von einer bestimmten Revision in ein neues Verzeichnis im Repository?

Hier ist, wie ich es zu tun beginnen. Brutal, ja, aber es ist das einzige, was garantiert völlig ignorieren Kollisionen und halte Revisionen Geschichte intakt.

  cd /scratchdir 
  svn co -r good svn://repository
  cd /hosed_project
  svn up -r HEAD
  cat >> /tmp/cp.sh 
  ORIG=$1
  TARG=$( echo $ORIG | sed 's/\/scratchdir\///' ); 
  cp $ORIG /hosed_project/$TARG;
  ^D
  chmod u+x /tmp/cp.sh
  find /scratchdir -not -wholename "*/.svn*" -exec /tmp/cp.sh {} \;

Beachten Sie, diese IMO nicht die „normale“ Art und Weise ist, ist der normale Weg, um einen Zweig von einer alten Version zu erstellen, und dann diesen Zweig verschmelzen zurück in den Kopf. (Zumindest das ist, wie es verwendet arbeiten)

Bearbeiten: Der obige Code ist nicht getestet, kann es nicht wörtlich ausgeführt

Könnten Sie die obersten Verzeichnisse svn del, dann svn copy sie:

svn copy svnurl@version svnurl 

Ich bin mir nicht ganz sicher, ob diese Arbeit, wie ich es nicht in einer Live-Produktion noch verwendet haben, aber ich auf einem Test-Repository gerade jetzt versucht, (ich eine meiner Produktion diejenigen kopiert) und es scheint arbeiten.

Wenn Sie in Ihrem Repository sind, verwenden Sie den folgenden Befehl ein:

svn update -r 24 trunk

Wo 24 ist die Versionsnummer und Stamm ist die Datei / Ordner, den Sie aktualisieren möchten (oder wieder herzustellen, in diesem Fall) an der Revisionsnummer.

In meinem Test wurden mehrere Dateien aktualisiert und (Wieder-) hinzugefügt und nach einem Commit tun ich keine Warnungen überhaupt erhalten haben. Ich änderte dann eine Datei mit einigen Dummy-Text und versucht, noch eine andere begehen, und nur die Datei auf der modifizierten Liste aufgetaucht. So scheint es ziemlich gut zu funktionieren!

Noch einmal, ich habe das nicht vor in Live-Produktionen verwenden, so dass, wenn ich falsch bitte Beratung bin. Ich würde gerne wissen, ob dies der richtige Weg ist, zu gehen, weil ich mich selbst sehen kann dies in der (nahen) Zukunft benötigen.

-Dave

Example:
    Rev 100 all is working great        
    Rev 101 somebody really corrupted the dir structure and / or merged in bad changes, etc.
    Rev 102 You delete /trunk
    Rev 103 You copy /trunk@100 to HEAD
        You now have a /trunk that reflects only Rev 100 and 103. Not 101 or 102.

svn del svn://[RepoName]/trunk -m "removing issue in HEAD"
svn copy svn://[RepoName]/trunk@100 svn://[RepoName]/trunk -m "Copy of correct revision of trunk to HEAD"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top