Ich habe mein SVN-Repository durcheinander gebracht und muss nun das gesamte Repository von Revision 28 auf 24 zurücksetzen und möchte mich nicht mit Unterschieden oder Konflikten befassen. Gibt es eine schnelle und einfache Möglichkeit, dies zu tun? Ich konnte einzelne Dateien mit dem Befehl "Zusammenführen" zurücksetzen, bevor dies in Ordnung war. In diesem Fall möchte ich jedoch alle Dateien aus Version 28 wieder in das Repository aufnehmen, wenn ich sie nur löschen möchte.
Ich benutze die Kommandozeile auf einer Linux-Box (Bash).
Vielen Dank
BEARBEITEN
Danke für all die Hilfe! Ich habe es behoben durch:
svnadmin create /svnroot/<repo>.fixed
svnadmin dump -r 1:24 /svnroot/<repo> --incremental > dump.svn
svnadmin load /svnroot/<repo>.fixed < dump.svn
Legen Sie dann das alte Repo an einem Sicherungsort ab und verschieben Sie das repo.fixed in das Repo.
Danke noch einmal!
Antworten:
Überprüfen Sie svnadmin dump / load. Es wird eine Textdatei mit jeder Version Ihrer Dateien erstellt. Möglicherweise können Sie alles über / unter einem bestimmten Punkt löschen und erneut importieren.
Siehe beispielsweise Migrieren von Repository-Daten an anderer Stelle
quelle
Eine "umgekehrte" Zusammenführung kann das sein, was Sie brauchen. Siehe Abschnitt "Änderungen rückgängig machen" im SVN-Buch.
ZB svn merge -r 28:24 [Pfad zu svn]
quelle
svn ci -m "Revering all changes back to revision X"
) zu überprüfen . Es ist weiterhin möglich, die fehlerhaften Revisionen auszuchecken. Dadurch wird jedoch die gewünschte Revision wieder bei HEAD angezeigt.Wenn Sie Zugriff auf den SVN-Server haben, können Sie ihn einfach bearbeiten
path/db/current
, die alte Revisionsnummer, zu der Sie zurückkehren möchten (hier: 24), dort ablegen und nicht mehr benötigte Revisionsdateien (dh 25, 26, 27, 28) aus entfernenpath/db/revs/0/
. Zumindest hat das heute bei mir funktioniert, nachdem ich versehentlich ein Verzeichnis im Repository entfernt hatte.quelle
svnadmin recover /path/to/repo
zu können.path/db/revs/0
dann vorhanden sind, wenn Sie weniger als 1000 Commits haben. Wenn Sie mehr als das haben, sind die Dateien inpath/db/revs/X
, wobei X die Festschreibungsnummer geteilt durch 1000 istWenn Sie wirklich "Beweise" löschen müssen, dass die Dateien jemals existiert haben, müssen Sie die oben beschriebenen Aktionen svndump / svnload ausführen.
In einer "normalen" Situation, in der Sie einen Fehler gemacht haben, müssen Sie die umgekehrte Zusammenführung verwenden. Dadurch wird sichergestellt, dass das Rückgängigmachen der Änderungen nach r24 auch rückgängig gemacht, geändert usw. werden kann.
Der folgende Befehl sollte funktionieren, um Ihre Änderungen rückgängig zu machen (Sie müssen das Ergebnis der Zusammenführung festschreiben, um die Zusammenführung im Repository widerzuspiegeln).
quelle
Wenn Sie keine Administratorrechte in Anspruch nehmen, können Sie keine alten Revisionen auslöschen, ABER Sie können sie mit nur einem erstaunlich einfachen Befehl "svn copy" sehr gut ausblenden (nickf und JesperE haben dies bereits erwähnt, aber auf ziemlich kryptische Weise).
Und das war's, die Revisionen 25 bis 28 sind vollständig aus dem SVN-Protokoll verschwunden. Es ist überhaupt kein Hack, es ist eine sichere und (kaum ...) dokumentierte Funktion.
Wenn "Ressource" ein Verzeichnis ist, müssen Sie es von der letzten URL entfernen:
(sonst würden Sie es in sich selbst kopieren)
quelle
svn copy prot://srv/path/proj ...
Befehl , den Sie einen Fehler wie den gibt „svn: E170000: ... ist nicht im selben Repository als ...“ , dann können Sie arbeiten-um es durch ein Tunsvn checkout prot://srv/path/proj@321 coolver
dannsvn copy coolver/proj prot://srv/path/
; # ftw!Für jeden, der TortoiseSVN verwendet, ist die Lösung einfach:
Diese Methode behält den Versionsverlauf bei (dh alle von Ihnen zurückgesetzten Revisionen).
quelle
Sie können eine bestimmte Revision erneut auschecken. http://svnbook.red-bean.com/de/1.1/re04.html
quelle
Wenn sich die Ordnerstruktur Ihrer Anwendung nicht geändert hat, checken Sie die alte Version aus und ersetzen Sie die .svn-Ordner von der letzten Version in die ausgecheckte alte Version. Jetzt können Sie die "ältere" Version festschreiben.
quelle
Wenn Sie Dateien wirklich vollständig aus dem Repository entfernen möchten, müssen Sie einen Svndump in eine Datei ausführen, die nicht gewünschten Drehzahlen und / oder Dateipfade herausfiltern, ein neues Repo erstellen und den gefilterten Dump in das neue laden Repository. Bevor Sie dies tun, sollten Sie den Abschnitt zum SVN-Buch über die Repository-Wartung sorgfältig lesen und sicherstellen, dass Sie das vorhandene Repo erst entfernen, wenn Sie sicher sind, dass das neue das gewünschte Material enthält.
quelle
Könnten Sie
svn del
die obersten Verzeichnisse, dannsvn copy
sie:quelle
Ich hasse es, das zu sagen, aber das ist eine Situation, in der ich Backups meines SVN-Repositorys verwendet habe.
Können Sie Dateien einer bestimmten Revision in ein neues Verzeichnis im Repository kopieren?
quelle
Hier ist, wie ich anfangen würde, es zu tun. Brutal, ja, aber es ist das einzige, was garantiert ist, Kollisionen vollständig zu ignorieren und den Revisionsverlauf intakt zu halten.
Beachten Sie, dass dies nicht der "normale" Weg ist, IMO. Der normale Weg besteht darin, einen Zweig aus einer alten Version zu erstellen und diesen Zweig dann wieder in den Kopf einzufügen. (Zumindest war es so so funktioniert)
Bearbeiten: Der obige Code ist nicht getestet, führen Sie ihn NICHT wörtlich aus
quelle
Ich bin mir nicht ganz sicher, ob diese Arbeit funktioniert, da ich sie noch nicht in einer Live-Produktion verwendet habe, aber ich habe gerade ein Test-Repository ausprobiert (ich habe eines meiner Produktions-Repository kopiert) und es scheint zu funktionieren.
Wenn Sie sich in Ihrem Repository befinden, verwenden Sie den folgenden Befehl:
Wobei 24 die Revisionsnummer und die Amtsleitung ist die Datei / der Ordner, die Sie auf diese Revisionsnummer aktualisieren (oder in diesem Fall wiederherstellen) möchten.
In meinem Test wurden mehrere Dateien aktualisiert und (erneut) hinzugefügt, und nach einem Commit erhielt ich keinerlei Warnungen. Ich habe dann eine Datei mit einem Dummy-Text geändert und ein weiteres Commit versucht, und nur diese Datei ist in der geänderten Liste aufgetaucht. Es scheint also ziemlich gut zu funktionieren!
Auch dies habe ich vorher nicht in Live-Produktionen verwendet. Wenn ich mich irre, bitte um Rat. Ich würde gerne wissen, ob dies auch der richtige Weg ist, denn ich kann mir vorstellen, dass ich dies in (naher) Zukunft brauche.
-Dave
quelle
quelle