2013-07-02 13 views
7

Tagi są zaimplementowane jako gałęzie w Subversion. Zatem moje pytanie: po utworzeniu tagu Subversion - jak zamknąć tę gałąź tak, aby nikt nie dodawał zestawów zmian do tej gałęzi tagów przez przypadek?Jak zamknąć gałąź-podwersję?

Na przykład rozważyć następujący układ katalogów:

 
calc+-trunk 
    |-branches 
    |-tags 

w pewnym momencie bagażniku jest gotowy do wydania i jest oznaczona:

$ svn cp svn://example.net/calc/trunk svn://example.net/calc/tags/v1.0 

teraz wypadek może się zdarzyć:

$ svn co svn://example.net/calc/tags/v1.0 
$ cd v1.0 
$ # change files 
$ svn ci 

(być może powyższy adres URL został skopiowany i zamiast tego oznaczono gałąź)

Jak mogę zamknąć gałąź calc/tags/v1.0 w taki sposób, że ostatnia svn ci zawiedzie?

Nazywam to zamykaniem - alternatywnie można wywołać tę operację przełączającą gałąź do trybu tylko do odczytu - lub coś w tym stylu.

+1

dotyczących działów fabularnych mamy regułę w moim towarzystwie, że należy zmienić nazwę oddziału {old name} _closed. Wciąż wiemy, że stworzyliśmy gałąź funkcji (z przydatną nazwą) i zamknęliśmy ją później po scaleniu. – Bjoern

Odpowiedz

6

Możesz kontrolować zatwierdzenia przez pre-commit hook. This one pozwoli ci tworzyć, ale nie edytować znaczników. Możesz kontrolować dostęp do oddziałów (zapobieganie zmianom lub utrzymywanie, kto może dokonać zmiany w wybranej grupie osób).

Utworzyłem oryginalną kopię, gdy zorientowałem się, że użytkownicy mogli przypadkowo edytować znacznik bez znaczenia. Chciałem, aby użytkownicy mogli tworzyć tagi, ale nie mogli zmodyfikować tagu po jego utworzeniu.

Kontrolujesz przechwyt przez plik kontrolny (a ten plik kontrolny może nawet znajdować się w repozytorium dla łatwego dostępu). Pierwsza linia uniemożliwia każdemu zapisanie do katalogu /tags (lub dowolnych podkatalogów). Drugi umożliwia użytkownikom kopiowanie gałęzi do nowego znacznika, ale nie może modyfikować niczego w tym znaczniku.

[FILE You cannot edit a tag once it's been created] 
file = /tags/** 
access = read-only 
users = @ALL 

[FILE You cannot edit a tag once it's been created] 
file = /tags/* 
access = add-only 
users = @ALL 

Możesz zrobić to samo w oddziale. Tutaj 2.2 gałąź jest całkowicie zamknięty i tylko Bob i Carol może wprowadzać zmiany do 2,3 oddziału, gdyż przygotowuje się do wydania:

[FILE No one is allowed to touch the 2.2 branch. It is dead] 
file = /branches/2.2 
access = read-only 
users = @all 

[FILE Only Bob and Carol can make changes to the 2.3 branch] 
file = /branches/2.3/** 
access = read-only 
users = @ALL 

[FILE Only Bob and Carol can make changes to the 2.3 branch] 
file = /branches/2.3/** 
access = read-write 
users bob, carol 
1

Masz trzy opcje, od najłatwiejszej/najszybszej do najbardziej złożonej.

  1. Usuwanie gałęzi (to naprawdę nie jest usunięta, zawsze można je odzyskać).
  2. Utwórz regułę w pliku konfiguracyjnym autoryzacji opartym na ścieżce (zakładając, że używasz jednego), aby odmówić zapisów do tej ścieżki.
  3. Zainstaluj (lub zmodyfikuj, jeśli już istnieje) skrypt przechwytywania wstępnego, aby odrzucić wszystkie zatwierdzenia do tej ścieżki.
+0

Hm, usunięcie go spowoduje również usunięcie go z listy 'calc/tags', czyż nie? Opcja 3 wydaje się najbardziej użyteczna - ponieważ użytkownicy powinni mieć możliwość pisania w "calc/tags" - np. Podczas tworzenia tagu _new_. Tylko zatwierdzanie istniejących tagów powinno być zabronione. Czy możesz dodać przykład haka dowodu koncepcji? – maxschlepzig

+0

Usunięcie spowoduje, że nie będzie już widoczny w wersji 'HEAD' (lub jakiejkolwiek wersji po tej, w której został usunięty), ale nadal znajduje się w repozytorium. Zobacz http://stackoverflow.com/questions/464384/svn-pre-commit-hook-for-avoiding-changes-to-tags-subdirectories, aby uzyskać wskazówki dotyczące podobnego skryptu. – alroc