Frage

Seit einigen Jahren, ich warte auf Subversion ein Feature „dauerhaft löschen“ (auslöschen) -Funktion. Ich zögere, den Übergang zu Subversion (aus Visual Source: p) zu machen, weil ich denke, dies ist ein wesentliches Merkmal, da sonst ich das Repository unstopably wachsen erwarten würde. Doch für einen oder anderen Grund, wird das Feature verschoben immer und immer wieder. So beginne ich mich gefragt, ob es eine andere Funktion oder Abhilfe ist, die die obliterate Funktion entbehrlich macht.

Was tun Sie, wenn Sie den SVN zentralen Repository verkleinern möchten?

Beispiel 1 : Ich Check in einem großen dritte Bibliothek , und nach ein paar Wochen, die ich erkennen, dass es nicht für meine Bedürfnisse geeignet ist. Ich möchte nicht, dass speichern und Backup, dass große Menge von Daten für immer.

Beispiel 2 :. Ich habe 10 Versionen von 10 großen Bibliotheken von Drittanbietern im Repository, aber ich nur die neuesten Versionen verwendet

Beispiel 3 : Ich habe aus Versehen in sensiblen Informationen überprüft (wie von John ).

Beispiel 4 :. Ich habe aus Versehen in einigen großen Dateien überprüft, die nie gedacht waren im Repository gestellt werden

War es hilfreich?

Lösung

Es gibt eine ganze Menge Diskussion über svn obliterate auf dem Problem-Ticket unter der Apache Subversion-Website , die meisten davon enden etwa 2008. es scheint Einvernehmen darüber zu sein, dass es eine gute Möglichkeit ist, haben, obwohl sollte seine Verwendung selten sein.

Es gibt zwei Hauptgründe, warum es zu wollen.

Als erstes wird in vertraulichen Informationen Überprüfung kann ein Problem sein. Verlassen sie dort in, gelöscht, ist nicht unbedingt eine Option, je nach dem Grad der Vertraulichkeit und die Exposition des Repository.

Zweitens in einer großen Menge an Sachen Kontrolle, die nicht eingecheckt werden soll, kann die Größe des Repository drastisch erhöhen. Speicherplatz ist in der Regel billig heutzutage, aber es ist nicht unbegrenzt, und es gibt auch andere Möglichkeiten, Dateibereich Materie kann. Wenn es notwendig, ein Repository über eine Netzverbindung zu senden, ist, dass zusätzliche Zeit, die nicht wichtig ist oder nicht. Es können echte Vorteile zu der Lage, ein CD-ROM oder DVD-ROM zu brennen, die das gesamte Repository enthält.

Daher ist es eine nützliche Fähigkeit, die derzeit von Dumping, Filterung und Neuladen des Repository durchgeführt wird. Dies ist fehleranfällig nach Berichten die ich gesehen habe, kann langsam sein, und erfordert das Repository heruntergefahren.

Natürlich ist es kein hoher Priorität-Funktion für die Subversion-Team, da das, was es für einige Jahre gebraucht jemand ist, die Arbeit zu kommen mit einem Design und Implementierung, es zu tun. Schließlich sollte es nur sehr selten durchgeführt werden, und es gibt eine Abhilfe. Doch jeder, der eine ganze Menge Arbeit auf Subversion tun will könnte einen Patch zur Verfügung stellen, die (wenn gut genug Qualität) wahrscheinlich umgesetzt werden würden.

Andere Tipps

Es verletzt die Bedeutung der Quellcodeverwaltung.
Quellcodeverwaltung dreht sich alles um in der Lage, einen früheren Zustand wiederherzustellen. Wenn Sie eine Datei löschen dauerhaft werden Sie nicht in der Lage sein.

OTOH ich weiß VSS nicht so könnte ich falsch verstanden „dauerhaft löschen“

Der offensichtliche Grund dagegen ist, weil die Entwickler denken, wird es auf Balance SVN schlimmer machen - das Glück Sie in der Lage fühlen, nicht benötigte Sachen zu beschneiden wird in beträchtlichem Ausmaß durch deinen Zorn den Schatten gestellt werden, wenn Sie versehentlich etwas und Ihr / Stamm auszulöschen verloren geht.

FogBugz hat genau das gleiche Verhalten, und in ihrem Fall ist es ganz nach Design Ich glaube, den Schutz der Nutzer vor mir selbst.

Auslöschen 'verletzt die Versionskontrolle Prinzipien, die Sie haben wollen würde. Entweder man würde keinen Platz sparen, oder vorherige Tags würden gebrochen. Sie würden zu einer echten früheren Version zurück zu gehen nicht in der Lage sein, wenn Sie alle Dateien ausgelöscht hatten.

Wie für Ihre Kommentare über das Repository wächst ... Jede mögliche Repository linear mit der Größe der Veränderungen im Laufe der Zeit wachsen. Das ist der ganze Sinn eines Quellensteuersystems. Wenn Sie zu früheren Versionen nicht in der Lage zu verfolgen, dann warum nicht nur halten Sie sich an einen freigegebenen Ordner irgendwo?

Subversion Auslöschen, das vergessene Funktion , gibt es drei Komponenten auf die Frage, die Problem , die Grund und Lösung . Da Sie sich mit der Frage der Lösung begann, werde ich damit anfangen.

Lösung

Wie Sie bemerkt haben, gibt es keine große Lösung. Vor allem, wenn Sie mit einer großen Corporate-Repository zu tun hat, da die Lösung wird härter desto größer ist die Repo bekommt. Es gibt eine Funktion namens dump / Filter durch , die Sie können Sie Ihre Repo Sachen reinigen nicht wollen, aber es ist nicht so einfach zu bedienen, nicht schnell und nicht angewiesen.

Es hat ein rel="noreferrer"> (dem Faden folgen ) auf dem sVN-Team nach 2008 dort eine obliterate Funktion zu bekommen, aber der Aufwand einen stillen Tod gestorben.

Das Problem

Der Artikel, den ich am Anfang erwähnte tatsächlich hat eine gute Liste der Anwendungsfälle, wo man einen obliterate Befehl benötigen würde und in dem 516 Problem-Thread den Entwicklern bestätigt tatsächlich sein Verdienst.

Ach, scheint es zu spät für die jetzt; der wahre Grund, es nie später hinzugefügt wurde, war, dass es jetzt fast unmöglich, sie umzusetzen, wie es auf der grundlegendsten Ebene in den Code Haken (siehe auch kleiner Aufwand Link unter Solution).

Von dem FAQ-Eintrag :

  

Revisionen sind unveränderliche Bäume, die aufeinander aufbauen. verursachen würde einen Dominoeffekt eine Revision aus der Geschichte zu entfernen, Chaos in allen nachfolgenden Revisionen erstellen und möglicherweise alle Arbeitskopien ungültig zu machen.

Der Grund

Das Problem ist, dass ursprünglich das obliterate Feature wurde abgewiesen, da es nicht das Prinzip der wahren Versionskontrolle entsprechen wurde.

Auch von dem FAQ-Eintrag :

  

Wie entferne ich vollständig eine Datei aus der Geschichte des Repository?    Es gibt spezielle Fälle, in denen Sie vielleicht alle Beweise einer Datei oder begehen zu zerstören. (Vielleicht jemand begangen versehentlich ein vertrauliches Dokument). Das ist nicht so einfach, , da Subversion absichtlich entworfen, um nie Informationen zu verlieren .

Jedoch

Ich habe jetzt mit größeren Teams und größerem Projekt und im Grunde habe nie ein echtes Problem für viele Kunden mit SVN gearbeitet. Ja, die Anwendungsfälle erwähnten Warrant eine obliterate Funktion, aber so weit ich bin nicht davon überzeugt, dass dies ein Problem ist, dass Sie immer und immer wieder, wo Sie hinkommen. Natuerlich, die Natur dieses besonderen Problems ist, dass man nur einen Fehler einmal machen und es kann nicht richtig rückgängig gemacht werden.

Da die Daten aus dem Repository zu entfernen, die grundlegende Prämisse der Quellensteuerung bricht, dass ist, dass es möglich ist, alle früheren Zustände und Änderungen an den Quellbaum zu reproduzieren. Wenn Sie etwas aus der Versionskontrolle auslöschen wollen, sind Sie wahrscheinlich „tun es falsch“, wie sie sagen.

I für verschiedene Versionskontrollsysteme nutzen etwa 15 Jahren und nie eine Funktion wie diese benötigt werden.

Ich frage mich, was die Gründe dafür sind, dass Sie diese Funktion wollen:

  • Scheibenraum? Kaum zu glauben, den Preises des Scheibenraumes unter Berücksichtigung
  • verpflichtet, ein Passwort Versionskontrolle? Nun, das wird dich lehren. Gehen und das Passwort ändern
  • Geschwindigkeit des Repository? Nicht so klingen, aber wenn ich ein völlig anderes System mit vermeintlich besserer Leistung in Betracht ziehen würde.

Es ist möglich, die Größe einer SVN-Repository zu reduzieren, indem eine Sicherungs- und zu tun. Im Grunde mehr, wenn Sie sagen, dass Sie nie zu etwas zurückkehren wollen als ein paar Jahre alt ist es möglich, das Repository, Filter basierend auf Zeit zu entleeren, dann den Dump laden. aufgrund der Größe, um loszuwerden, eine einzelnen Datei zu wollen ist wahrscheinlich ein Hinweis darauf, dass die Datei in einem Quellensteuersystem in erster Linie gehörte nicht wirklich.

Es gibt einige scripting, die Sie Daten auslöschen können. Folgen Sie diesem Mailing-Liste Thread für weitere Informationen.

Es ist ein harter Weg, um es als das Wesen der Versionskontrolle zu tun ist, nicht Daten zu verlieren, im Gegensatz sie dauerhaft zu löschen. Aber wenn Sie beschneiden einmal im Jahr oder so ähnlich, dass es können erfolgen.

Der gesamte Punkt der Source-Control ist eine komplette Geschichte von dem, was Ihr Repository aussieht. Der obliterate Befehl Niederlagen diesen Zweck der Quellcodeverwaltung, und es ist ein misfeature in allen Versionskontrollsysteme, die es haben.

SVN hat billige Kopieren und billig Verzweigung, die nicht eine vollständige Kopie der Datei erforderlich ist - nur die geänderten Bits. Sein zentrales Repository ist in der Regel sehr überschaubar in der Größe, so dass diese misfeature überflüssig.

Auslöschen ist kein wesentliches Merkmal von Subversion, weil es tatsächlich die grundlegenden Prinzipien der Versionskontrolle unterbricht (was: die ganze Geschichte aufzeichnen).

Und es ist kein wesentliches Merkmal, weil es Abhilfe ist dies ohnehin tun bekommen (mit svnadmin und Filterung).

Auch ist die Funktion derzeit stark gearbeitet. Siehe diesen Beitrag .

Zuletzt Ich habe es als ADMIN-Funktion bestimmt war, und der Administrator kann bereits Dump / Filter / broken_workaround und entfernen Geschichte sowieso. In Bezug auf die Audit-Trail, führt dies nicht das aktuelle Zitat ändern. Es wäre es weniger schrecklich machen, wenn etwas völlig entfernt muss.

Svnadmin obliterate eine der häufigsten gewünschten Funktionen ist, die die Entwickler endlich zugeben, sollte es existieren (endlich nach 8 Jahren !!!). Und die Öffentlichkeit davon nicht vorhanden, ist Benutzer weg von SVN zu jagen.

Leider hatte ich über dieses „fehlendes Feature“ die harte Tour zu lernen. Seit wann ist grundlegende Funktionalität ein Feature? Neue Benutzer beginnen, über diese und vermeiden SVN zu hören. Was mich betrifft, ich benutze jetzt Git.

Sie mag meine Meinung nicht? Linus verwies auf den SVN-Entwickler als Deppen, und das ganze zentrale System fehlerhaft. Ich vertraue darauf, Linus als echter Experte, und zwar weiß er über Quelle.

Was ich tue - nicht Subversion verwenden. Es tut uns Leid.

Sie (die Entwickler) obvoiously nicht einverstanden mit Ihrer Einschätzung, dass ein kritisches Merkmal zu sein. Hat das Unternehmen nicht stoppen ich im Moment arbeiten, es zu benutzen;). Ich ausschließen personaly Subversion für diesen genauen Grund

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top