2010-05-21 25 views
5

Ich benutze Subversion als RCS. Immer wenn eine neue Version meines Projekts fertig ist, erstelle ich ein Tag davon (Kopie des Stammes). Weiß jemand, wie ich dieses gekennzeichnete Verzeichnis vor dem versehentlichen Ändern schützen kann?Subversion: Schreibschutz für markierte Verzeichnisse

Zur Zeit als eine Umgehung sperren ich alle Dateien. Aber diese Schwelle bedeutet, dass der Benutzer mit der Sperre die Dateien bearbeiten kann.

Gibt es eine bessere Lösung?

Antwort

5

Sie können einen Vorab-Hook verwenden, um zu verhindern, dass Benutzer nach der Erstellung in ein Verzeichnis tags schreiben.

Sehen Sie diese im Zusammenhang SO Frage für Beispiele:
SVN pre-commit hook for avoiding changes to tags subdirectories

+0

Pre-Commit-Hooks sind Skripte, die komplexere Dinge tun können, wie z. B. nur Änderungen in den Tag-Verzeichnissen durch bestimmte Benutzer zulassen. –

+0

Wenn ein Pre-Commit-Hook der offizielle Weg ist, werde ich stattdessen das SVN-Attribut "svn: needs-lock" für alle Dateien setzen. – Alexander

+1

Setzen Sie die Eigenschaft nicht auf alle Dateien ... Dies ist gegen die Idee von SVN. Die Antwort zur pfadbasierten Autorisierung ist der richtige Weg. – khmarbaise

2

Sie nur die Erlaubnis mit path-based authorization auf den Tag-Verzeichnisse lesen geben kann.

+0

Das Problem mit dieser Lösung ist, dass Sie keine neuen "Tags" erstellen können. Wenn bestimmten Benutzern die Schreibberechtigung erteilt wird, besteht immer die Möglichkeit, Dateien innerhalb eines Tags versehentlich zu ändern. –

+0

Sie können festlegen, dass die Tags nach dem Erstellen nur lesbar sind und das normale Unterverzeichnis/tags beschreibbar bleiben: es:/myproject/tags ist beschreibbar, während/myproject/tags/mein-erstes-Tag nach der Tag-Erstellung schreibgeschützt ist. –

0

Wenn Sie das Attribut svn:needs-lock für alle Dateien im Tag festlegen, werden alle Dateien als schreibgeschützt ausgecheckt, es sei denn, der Benutzer erwirbt explizit eine Sperre. Dies wird (in den meisten Fällen) verhindern, dass Dateien geändert werden. Es hindert niemanden daran, das Nur-Lesen-Flag zu ändern oder eine Sperre zu erhalten, aber es verringert die Wahrscheinlichkeit versehentlicher Änderungen.

Subversion selbst kann das Attribut svn:needs-lock nicht auf einen Ordner anwenden, aber im TortoiseSVN-Client (Windows) zum Beispiel, wenn Sie dies versuchen, wendet es stattdessen die Eigenschaft auf alle Dateien im Ordner und den Unterordnern an. Sie können dies nicht vom Replay-Browser TortioseSVN aus ausführen. Sie müssen also eine Arbeitskopie des Tags auschecken, die Eigenschaften ändern und dann die Eigenschaftenänderungen einchecken. Andere Kunden können variieren; Wenn Sie den nativen Subversion-Befehlszeilen-Client verwenden, ist möglicherweise ein geeignetes Shell-Skript oder ähnliches erforderlich, um Dateien und Unterordner zu durchlaufen, um das Attribut in großen Mengen anzuwenden. TortoiseSVN warnt Sie zumindest, wenn Sie versuchen, etwas in einem Ordner Tags zu ändern - aber das ist nur eine Konvention, keine Durchsetzung.

Die svn:needs-lock Lösung ist etwas schwach und leicht zu umgehen und verhindert nicht, dass neue Dateien zu einem Tag-Ordner hinzugefügt werden; Eine stärkere Alternative besteht darin, einen Dummy-Benutzer zu erstellen und eine Sperre für das gesamte Tag unter diesem Benutzernamen zu erhalten. Dies verhindert, dass "echte" Benutzer einchecken können, und für Work-Copy-Checkouts wird ihr schreibgeschütztes Attribut wie bei svn:needs-lock gesetzt - der Unterschied besteht darin, dass sie keine Sperre erhalten und die Option ändern können Lesezugriffsattribut für Arbeitskopie lässt das Einchecken ebenfalls nicht zu.

+0

Ich weiß, die Frage ist alt, aber ich suchte nach einer Lösung für genau das und fand diese Frage. Diese Antwort beschreibt, was ich gerade tun möchte, da es keine direkte Unterstützung dafür zu geben scheint. – Clifford

Verwandte Themen