12 Stimmen

Gibt es eine Möglichkeit, die Übergabe von Dateien an das SVN-Repository zu blockieren?

Heute stieß ich auf ein Problem, bei dem jemand versehentlich eine proj.user-Datei in das SVN-Repository übertragen hatte. Als ich aktualisieren wollte, verursachte dies offensichtlich Probleme.

Ich habe mich gefragt, ob es eine Möglichkeit gibt, bestimmte Dateierweiterungen für die Übergabe an das Repository zu sperren.

Mir ist zwar klar, dass es eine Ignorierliste gibt, aber soweit ich weiß, hängt dies immer noch von der Person ab, die die Dateien zur Ignorierliste hinzufügt. Idealerweise würde ich dies gerne zentral steuern, so dass das Repository und nicht die Person die Kontrolle hat.

Ist dies möglich?

17voto

Jason Coco Punkte 77369

Ja, im Allgemeinen gibt es zwei Möglichkeiten. Entweder Sie erstellen Commit-Hooks (was Sie wahrscheinlich nicht tun wollen), oder, was einfacher ist, Sie fügen die Eigenschaft svn:ignore zu Ihrem Verzeichnis hinzu. Da die Eigenschaften zusammen mit dem Projekt gepflegt werden, wirkt sich dies auf alle aus. Zum Beispiel, um zu ignorieren *.user Dateien zu erstellen, können Sie dies zu dem Verzeichnis hinzufügen, in dem sie erscheinen sollen:

svn propset svn:ignore '*.user' .

Übertragen Sie dann Ihre Änderung wie gewohnt. Von nun an werden *.user-Dateien in diesem Verzeichnis nicht mehr an svn-Befehlen wie stat, update, commit und so weiter teilnehmen. Sie müssen die Eigenschaft jedoch zu jedem Verzeichnis hinzufügen, das ein Ignorierfeld benötigt. Sie wirkt nicht automatisch rekursiv auf Ihren Projektbaum. Wenn Sie aus irgendeinem Grund eine ignorierte Datei aktualisieren wollen, müssen Sie die Eigenschaft --no-ignores Flagge an den Befehl an.

0 Stimmen

Wird dies tatsächlich verhindern, dass es ausdrücklich als $ svn add ed?

0 Stimmen

Nein, wenn Sie es ausdrücklich hinzufügen, wird es zwar hinzugefügt, aber Aktualisierungen werden ignoriert.

3voto

Steven Robbins Punkte 26083

Sie könnten möglicherweise einen Subversion-Pre-Commit-Hook hinzufügen, um zu verhindern, dass die Leute sie committen. Dies hat den Vorteil, dass es serverseitig ist und nicht pro Client eingestellt werden muss.

1 Stimmen

Subversion-Eigenschaften werden ebenfalls mit dem Projekt verwaltet, so dass sie den Vorteil haben, dass sie sowohl überarbeitet als auch auf dem Server verwaltet werden :) und sie erfordern keine Programmierung.

0 Stimmen

Das tun sie, aber sie sind auch mühsamer einzurichten, wenn man viele Projekte/Verzeichnisse hat hin und her und so weiter :)

0 Stimmen

Ich stimme absolut zu, wenn Sie ein erfahrener Subversion-Administrator sind, aber wenn Sie diese Frage hier stellen, denke ich, dass die zusätzliche Arbeit des Hinzufügens der svn:ignore-Eigenschaft zu mehreren Projektverzeichnissen die bessere Wahl sein könnte :)

2voto

Sebastian Punkte 1795

Diesbezüglich:

Wird dies tatsächlich verhindern, dass sie ausdrücklich $ svn add'ed? - Sirlancelot 6. Januar '09 um 18:14

Nein, wenn Sie es ausdrücklich hinzufügen, wird es wird sie hinzugefügt, aber Aktualisierungen werden ignoriert werden. - Jason Coco 6. Januar '09 um 20:08

Ich glaube, man kann das nicht mit svn:ignore props machen. Wie im svnbook 1.5 Handbuch:

"Die Unterstützung von Subversion für ignorierbare Dateimuster erstreckt sich nur auf den einmaligen Prozess des Hinzufügens nicht versionierter Dateien und Verzeichnisse zur Versionskontrolle Kontrolle hinzuzufügen. Sobald sich ein Objekt unter Kontrolle von Subversion steht, gelten die Mechanismen zum Ignorieren Muster-Mechanismen nicht mehr auf es. Mit anderen Worten: Erwarten Sie nicht, dass Subversion nicht, dass es Änderungen die Sie an einer versionierten Datei vorgenommen haben, einfach weil der Name dieser Datei mit einem Ignoriermuster entspricht - Subversion beachtet immer merkt sich alle seine versionierten Objekte."

0 Stimmen

Plus 1, da dies ein wichtiger Unterschied zwischen svn und git ist, denn mit git können Sie eine Datei zum Projektarchiv hinzufügen, aber keine Änderungen verfolgen, z. B. Audio- oder Grafikdateien.

2voto

Darrell Duane Punkte 3824

Ich musste die

svn propset svn:ignore '*.user' .

Um die oben akzeptierte Antwort zu verwenden.

1voto

MatthieuGD Punkte 4432

Sie möchten serverseitig eine Ignorierliste hinzufügen? Ich denke, es ist nicht direkt möglich, aber Sie können die Dateien im Pre-Commit-Hook analysieren (siehe : http://svnbook.red-bean.com/en/1.1/ch05s02.html#svn-ch-5-sect-2.1 ) und die Übergabe vollständig verweigern, wenn der Name/das Muster falsch ist?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X