Co oznaczają „gałąź”, „znacznik” i „pień” w repozytoriach Subversion?

1193

Wiele razy widziałem te słowa w dyskusjach na temat Subversion (i chyba ogólne repozytorium).
Używam SVN do moich projektów od kilku lat, ale nigdy nie zrozumiałem pełnej koncepcji tych katalogów.

Co mieli na myśli?

grapefrukt
źródło
29
Oto dobry artykuł, na który natknąłem się, wyjaśniając, jak / kiedy używać pnia, gałęzi i tagów. Nie korzystałem wcześniej z kontroli źródła, ale ten artykuł ułatwił zrozumienie noobowi takiemu jak ja. Codziennie z Subversion
badmoon

Odpowiedzi:

910

Hmm, nie jestem pewien, czy zgadzam się z tym, że Nick ponownie jest podobny do gałęzi. Tag to tylko marker

  • Trunk byłby głównym elementem rozwoju, poczynając od początku projektu aż do chwili obecnej.

  • Odgałęzienie będzie kopią kodu pochodzącą z określonego punktu w linii głównej, która jest używana do wprowadzania poważnych zmian w kodzie przy jednoczesnym zachowaniu integralności kodu w linii głównej. Jeśli główne zmiany działają zgodnie z planem, zwykle są one z powrotem łączone z bagażnikiem.

  • Tag będzie punktem na pniu lub gałęzi, który chcesz zachować. Dwoma głównymi powodami zachowania byłoby to, że albo jest to główna wersja oprogramowania, czy to alfa, beta, RC lub RTM, lub jest to najbardziej stabilny punkt oprogramowania przed zastosowaniem poważnych zmian w magistrali.

W projektach o otwartym kodzie źródłowym główne gałęzie, które nie są przyjmowane do pnia przez interesariuszy projektu, mogą stać się podstawą forks - np. Całkowicie oddzielne projekty o wspólnym pochodzeniu z innym kodem źródłowym.

Poddrzewa gałęzi i znaczników można odróżnić od pnia na następujące sposoby:

Subversion pozwala administratorom systemów tworzyć skrypty przechwytujące, które są uruchamiane w celu wykonania w przypadku wystąpienia określonych zdarzeń; na przykład zatwierdzenie zmiany w repozytorium. Typowa implementacja repozytorium Subversion bardzo często traktuje każdą ścieżkę zawierającą „/ tag /”, która ma być chroniona przed zapisem po utworzeniu; wynikiem netto jest to, że utworzone tagi są niezmienne (przynajmniej dla „zwykłych” użytkowników). Odbywa się to za pośrednictwem skryptów przechwytujących, które wymuszają niezmienność, zapobiegając dalszym zmianom, jeśli znacznik jest węzłem nadrzędnym zmienionego obiektu.

Subversion posiada również funkcje od wersji 1.5, odnoszące się do „śledzenia scalania gałęzi”, dzięki czemu zmiany przypisane do gałęzi mogą zostać ponownie włączone do linii głównej z obsługą przyrostowego, „inteligentnego” scalania.

Jon Limjap
źródło
284
Pomyłka ze znacznikami i gałęziami polega na tym, że w svn tak naprawdę nie ma między nimi żadnej różnicy, oprócz nazwy katalogu. W svn możesz zatwierdzać zmiany w tagu, a tak naprawdę trudno temu zapobiec. Większość innych VCS traktuje tagi jako niezmienne migawki (punkty w czasie).
Ken Liu
4
Tagskatalog jest również często używany do testowania i weryfikacji kamieni milowych przez zwykłego użytkownika. Byłoby to również dobre miejsce na umieszczenie prototypu (tylko kilka pomysłów na mojej głowie).
Jeff Noel
6
@KenLiu Istnieją haki, dzięki którym tagi są niezmienne. Oznacza to, że możesz utworzyć tag i pobrać go, ale nie wprowadzać żadnych zmian. Oczywiście znacznik będący tylko częścią repozytorium oznacza, że ​​dostępna jest pełna historia. Jeśli ktoś zmieni tag, możesz to śledzić i dlaczego. W wielu systemach VCS, jeśli zmodyfikujesz znacznik, może nie być żadnego sposobu, aby wiedzieć.
David W.
3
Być może należy wspomnieć o stabilnych gałęziach : wprowadzone tam zmiany zwykle nie są scalane z powrotem w pień .
Wolf
4
Rozumiem, że w „idealnym świecie” nigdy nie powinien nastąpić rozwój w pniu, pień powinien zawsze być albo dokładnie działającym kodem, albo kodem, który ma zostać wydany na żywo. jako takie sprawiłyby, że gałęzie stałyby się głównym ośrodkiem rozwoju.
MikeT
556

Po pierwsze, jak zauważają @AndrewFinnell i @KenLiu, w SVN same nazwy katalogów nic nie znaczą - „trunk, gałęzie i znaczniki” są po prostu powszechną konwencją stosowaną przez większość repozytoriów. Nie wszystkie projekty używają wszystkich katalogów (dość często nie używa się w ogóle „znaczników”) i w rzeczywistości nic nie powstrzymuje cię przed nazywaniem ich tak, jak chcesz, chociaż łamanie konwencji jest często mylące.

Opiszę prawdopodobnie najczęstszy scenariusz użycia gałęzi i tagów oraz podam przykładowy scenariusz ich użycia.

  • Bagażnik : Główny obszar rozwoju. To jest miejsce, w którym znajduje się Twoja kolejna ważna wersja kodu i na ogół ma wszystkie najnowsze funkcje.

  • Oddziały : Za każdym razem, gdy wydajesz wersję główną, tworzona jest gałąź. Pozwala to na naprawę błędów i wydanie nowej wersji bez konieczności wydawania najnowszych - prawdopodobnie niedokończonych lub nieprzetestowanych - funkcji.

  • Tagi : za każdym razem, gdy wydajecie wersję (wydanie końcowe, kandydaci do wydania (RC) i bety), tworzycie dla niej tag. To daje ci kopię kodu w momencie, w jakim była w tym stanie, pozwalając ci wrócić i odtworzyć wszelkie błędy w razie potrzeby w poprzedniej wersji lub ponownie wydać poprzednią wersję dokładnie tak, jak była. Gałęzie i znaczniki w SVN są lekkie - na serwerze nie tworzy pełnej kopii plików, tylko znacznik z napisem „te pliki zostały skopiowane w tej wersji”, który zajmuje tylko kilka bajtów. Mając to na uwadze, nigdy nie powinieneś martwić się tworzeniem tagów dla dowolnego wydanego kodu. Jak powiedziałem wcześniej, tagi są często pomijane, a zamiast tego dziennik zmian lub inny dokument wyjaśnia numer wersji po wydaniu.


Załóżmy na przykład, że zaczynasz nowy projekt. Zaczynasz pracować w „pniu”, nad czym ostatecznie zostanie wydana wersja 1.0.

  • trunk / - wersja rozwojowa, wkrótce będzie 1.0
  • oddziały / - puste

Po zakończeniu 1.0.0 rozgałęziasz pień do nowej gałęzi „1.0” i tworzysz znacznik „1.0.0”. Teraz trwają prace nad tym, co ostatecznie będzie 1.1.

  • trunk / - wersja rozwojowa, wkrótce 1.1
  • wersja wydania oddziałów / 1.0 - 1.0.0
  • tags / 1.0.0 - 1.0.0 wersja wydania

Napotykasz kilka błędów w kodzie, naprawiasz je w bagażniku, a następnie łączysz poprawki z gałęzią 1.0. Możesz także zrobić coś przeciwnego i naprawić błędy w gałęzi 1.0, a następnie scalić je z powrotem do pnia, ale zwykle projekty trzymają się scalania tylko w jedną stronę, aby zmniejszyć szansę na coś pominięcia. Czasami błąd można naprawić tylko w wersji 1.0, ponieważ jest on przestarzały w wersji 1.1. To naprawdę nie ma znaczenia: chcesz się upewnić, że nie wydasz 1.1 z tymi samymi błędami, które zostały naprawione w 1.0.

  • trunk / - wersja rozwojowa, wkrótce 1.1
  • oddziały / 1.0 - nadchodzące wydanie 1.0.1
  • tags / 1.0.0 - 1.0.0 wersja wydania

Gdy znajdziesz wystarczającą liczbę błędów (lub może jeden błąd krytyczny), decydujesz się na wydanie wersji 1.0.1. Stwórz więc tag „1.0.1” z gałęzi 1.0 i zwolnij kod. W tym momencie bagażnik będzie zawierał 1.1, a gałąź „1.0” zawiera kod 1.0.1. Następnym razem, gdy wydasz aktualizację do wersji 1.0, będzie to wersja 1.0.2.

  • trunk / - wersja rozwojowa, wkrótce 1.1
  • oddziały / 1.0 - nadchodzące wydanie 1.0.2
  • tags / 1.0.0 - 1.0.0 wersja wydania
  • tags / 1.0.1 - 1.0.1 wersja wydania

W końcu jesteś prawie gotowy do wydania 1.1, ale najpierw chcesz zrobić wersję beta. W takim przypadku prawdopodobnie utworzysz gałąź „1.1” i tag „1.1beta1”. Teraz praca nad tym, co będzie 1.2 (lub 2.0), jest kontynuowana w pniu, ale praca nad 1.1 trwa w gałęzi „1.1”.

  • trunk / - wersja rozwojowa, wkrótce będzie 1.2
  • oddziały / 1.0 - nadchodzące wydanie 1.0.2
  • oddziały / 1.1 - nadchodzące wydanie 1.1.0
  • tags / 1.0.0 - 1.0.0 wersja wydania
  • tags / 1.0.1 - 1.0.1 wersja wydania
  • tags / 1.1beta1 - 1.1 beta 1 wersja wydania

Po wydaniu wersji 1.1 finalnej wykonujesz tag „1.1” z gałęzi „1.1”.

Możesz także nadal utrzymywać 1.0, przenosząc poprawki błędów między wszystkimi trzema gałęziami (1.0, 1.1 i magistralą). Ważne jest to, że dla każdej głównej wersji oprogramowania, którą zarządzasz, masz gałąź, która zawiera najnowszą wersję kodu dla tej wersji.


Inne zastosowanie gałęzi dotyczy funkcji. To tutaj rozgałęziasz pień (lub jedną z gałęzi wydania) i pracujesz nad nową funkcją w izolacji. Po zakończeniu funkcji scalasz ją z powrotem i usuwasz gałąź.

  • trunk / - wersja rozwojowa, wkrótce będzie 1.2
  • oddziały / 1.1 - nadchodzące wydanie 1.1.0
  • branch / ui-rewrite - gałąź eksperymentalna

Chodzi o to, gdy pracujesz nad czymś destrukcyjnym (co powstrzymałoby lub przeszkadzałoby innym w wykonywaniu ich pracy), czymś eksperymentalnym (który może nawet tego nie zrobić) lub po prostu czymś, co zajmuje dużo czasu (i obawiasz się, że jeśli utrzymasz wydanie 1.2, gdy będziesz gotowy do rozgałęzienia 1.2 z pnia), możesz to zrobić w oddziale. Zasadniczo aktualizujesz go za pomocą łącza, cały czas łącząc z nim zmiany, co ułatwia ponowną integrację (scalanie z powrotem do łącza) po zakończeniu.


Zauważ też, że schemat wersji, którego tu użyłem, jest tylko jednym z wielu. Niektóre zespoły wprowadzałyby poprawki błędów / wydania konserwacyjne w wersji 1.1, 1.2 itd., A główne zmiany w wersji 1.x, 2.x itd. Wykorzystanie tutaj jest takie samo, ale można nazwać gałąź „1” lub „1 .x ”zamiast„ 1.0 ”lub„ 1.0.x ”. (Poza tym wersja semantyczna jest dobrym przewodnikiem po tym, jak robić numery wersji).

gregmac
źródło
6
@baruch - To całkowicie źle. Tagi są lekkie i są (w odniesieniu do samego Subversion) identyczne z gałęziami.
Josh Kelley
7
Uwielbiam szczegóły przypadku użycia. Dzięki @gregmac.
Jeromy French,
2
Czy mogę uzyskać wycenę, gdzie stwierdzono, że tagi / gałęzie są lekkie? To nie wydaje się tak ...
Cardin Lee JH
3
To powinna być zaakceptowana odpowiedź, która jest o wiele lepsza ^^
Nam G VU
4
@Cardin Nie mam teraz referencji, ale ważne jest, aby pamiętać, że tagi są lekkie na serwerze, ale nie na kliencie. Jeśli sprawdzisz wszystkie tagi, otrzymasz tyle pełnych kopii. Jeśli jednak spojrzysz na rozmiar repozytorium na serwerze, zwiększy się on tylko o kilka bajtów na tag. Dlatego, ogólnie rzecz biorąc, nie powinieneś pobierać katalogu głównego.
gregmac
97

Oprócz tego, co powiedział Nick, możesz dowiedzieć się więcej na stronie Streaming Lines: Wzorce rozgałęziania dla równoległego tworzenia oprogramowania

wprowadź opis zdjęcia tutaj

Na tej figurze mainjest tułów, rel1-maintgałąź i 1.0metka.

grom
źródło
1
@ Wolf mógł być - ten schemat jest dość ogólny, niezależnie od oprzyrządowania. Wszystkie SCM używają różnych słów, ale te same pojęcia, nie ma różnicy między magistralą a magistralą; lub bagażnik i mistrz. Ten schemat pokazuje, jak moja obecna firma używa SVN.
gbjbaanb
@gbjbaanb Dziękujemy za udostępnienie. ... i wydaje się, że pytanie nie obejmuje tagów . Czy to czysty zbieg okoliczności (także w twojej obecnej firmie), że żadne fuzje nie przechodzą z głównych do utrzymywanych oddziałów?
Wolf
@Wolf Brak zbiegów okoliczności - tylko oddział z pnia, wykonaj pracę, połącz z powrotem w pień. Następnie rozgałęzić pień do gałęzi tagu. Rozważamy inny „pień” o nazwie Integracja, który zakończył scalanie z nim gałęzi do testowania, które nie stanowi wydania, pień jest nadal używany w tych gałęziach, które zdecydujemy się wprowadzić w następnym wydaniu. Jedynym razem, kiedy łączysz się z pnia do gałęzi, jest aktualizacja gałęzi o długim czasie działania, ale lepiej (i łatwiej) jest po prostu utworzyć nową gałąź z pnia i scalić zmiany starej gałęzi, jeśli jej potrzebujesz.
gbjbaanb
75

Ogólnie (widok agnostyczny narzędzia) gałąź jest mechanizmem wykorzystywanym do równoległego programowania. SCM może mieć od 0 do n gałęzi. Subversion ma 0.

  • Trunk jest główną gałęzią zalecaną przez Subversion , ale nie jesteś w żaden sposób zmuszony do jej utworzenia. Możesz to nazwać „głównym” lub „wydaniami”, albo wcale nie mieć!

  • Oddział reprezentuje wysiłek rozwojowy. Nigdy nie należy go nazywać po zasobie (jak „vonc_branch”), ale po:

    • cel „myProject_dev” lub „myProject_Merge”
    • obwód wydania „myProjetc1.0_dev” lub myProject2.3_Merge ”lub„ myProject6..2_Patch1 ”...
  • Tag jest migawką plików, aby łatwo wrócić do tego stanu. Problem polega na tym, że znacznik i gałąź są takie same w Subversion . I zdecydowanie poleciłbym podejście paranoiczne:

    możesz użyć jednego ze skryptów kontroli dostępu dostarczonych z Subversion, aby nikt nie robił nic poza tworzeniem nowych kopii w obszarze znaczników.

Tag jest ostateczny. Jego treść nigdy nie powinna się zmieniać. NIGDY. Zawsze. Zapomniałeś wiersza w informacji o wydaniu? Utwórz nowy tag. Przestarzałe lub usuń stare.

Teraz dużo czytałem o „scalaniu takich i podobnych w takich i takich gałęziach, a potem w końcu w gałęzi tułowia”. Nazywa się to przepływem scalania i nie ma tutaj nic obowiązkowego . Nie dlatego, że masz gałąź pnia, musisz scalić wszystko.

Zgodnie z konwencją gałąź pnia może reprezentować bieżący stan rozwoju, ale dotyczy to prostego projektu sekwencyjnego, czyli projektu, który ma:

  • brak rozwoju z wyprzedzeniem (do przygotowania następnej wersji sugeruje takie zmiany, że nie są one zgodne z obecnym rozwojem „trunk”)
  • brak masywnego refaktoryzacji (do testowania nowego wyboru technicznego)
  • brak długoterminowej konserwacji poprzedniej wersji

Ponieważ przy jednym (lub wszystkich) tych scenariuszach dostajesz cztery „pnie”, cztery „bieżące zmiany” i nie wszystko, co robisz w tym równoległym rozwoju, musi koniecznie zostać połączone z powrotem w „pień”.

VonC
źródło
38

W SVN znacznik i gałąź są bardzo podobne.

Tag = określony odcinek czasu, zwykle używany w wydaniach

Rozgałęzienie = również określony odcinek czasu, w którym rozwój może być kontynuowany, zwykle używany w głównych wersjach, takich jak 1.0, 1.5, 2.0 itd., A następnie po zwolnieniu tagujesz gałąź. Dzięki temu możesz nadal obsługiwać wersję produkcyjną, jednocześnie przechodząc do przodu z przełomowymi zmianami w bagażniku

Bagażnik = przestrzeń robocza dla programistów, tutaj powinien nastąpić cały rozwój, a następnie zmiany zostały scalone z powrotem z wydań branżowych.

Nick Berardi
źródło
30

Naprawdę nie mają żadnego formalnego znaczenia. Folder jest folderem SVN. Są ogólnie przyjętym sposobem organizacji twojego projektu.

  • Pień jest tam, gdzie utrzymujesz swoją główną linię rozwoju. Folder oddziałów to miejsce, w którym możesz tworzyć gałęzie, które trudno wyjaśnić w krótkim poście.

  • Gałąź jest kopią podzbioru projektu, nad którym pracujesz niezależnie od pnia. Może chodzi o eksperymenty, które nigdzie nie mogą się udać, a może o kolejne wydanie, które później wrócisz do bagażnika, gdy stanie się stabilny.

  • A folder znaczników służy do tworzenia oznaczonych kopii repozytorium, zwykle w punktach kontrolnych wydania.

Ale, jak powiedziałem, do SVN folder jest folderem. branch, trunka tag to tylko konwencja.

Używam słowa „kopiuj” swobodnie. SVN tak naprawdę nie robi pełnych kopii rzeczy w repozytorium.

Eric Z Beard
źródło
13

Bagażnik jest linia rozwoju, który posiada najnowszy kod źródłowy i możliwości. Powinien zawierać najnowsze poprawki błędów, a także najnowsze funkcje dodane do projektu.

Te gałęzie są zwykle używane do zrobienia czegoś z dala od tułowia (lub innej linii rozwojowej), które w przeciwnym razie zerwania kompilacji. Nowe funkcje są często wbudowane w gałąź, a następnie scalone z powrotem w pień. Gałęzie często zawierają kod, który niekoniecznie jest zatwierdzony dla linii rozwojowej, z której się wywodzi. Na przykład programista może wypróbować optymalizację czegoś w gałęzi i połączyć się ponownie z linią programistyczną tylko wtedy, gdy optymalizacja jest zadowalająca.

Te znaczniki są obrazami z repozytorium w określonym czasie. Nie powinno się na nich rozwijać. Najczęściej są używane do wykonania kopii tego, co zostało wydane klientowi, abyś miał łatwy dostęp do tego, z czego korzysta klient.

Oto link do bardzo dobrego przewodnika po repozytoriach:

Warto również przeczytać artykuły w Wikipedii.

Mbillard
źródło
12

Właśnie o to chodzi w tworzeniu oprogramowania, nie ma spójnej wiedzy o niczym, wszyscy zdają się mieć na swój sposób, ale to dlatego, że jest to stosunkowo młoda dyscyplina.

Oto moja prosta prosta droga

trunk - katalog trunk zawiera najbardziej aktualny, zatwierdzony i scalony fragment pracy. Wbrew temu, co wielu przyznało, mój bagażnik służy tylko do czystej, schludnej, zatwierdzonej pracy, a nie do obszaru rozwojowego, ale raczej do obszaru wydania.

W pewnym momencie, gdy bagażnik wydaje się gotowy do zwolnienia, jest on oznaczony i zwolniony.

oddziały - katalog oddziałów zawiera eksperymenty i bieżące prace. Praca pod oddziałem pozostaje tam, dopóki nie zostanie zatwierdzona do włączenia do pnia. Dla mnie jest to obszar, w którym cała praca jest wykonywana.

Na przykład: Mogę mieć gałąź iteracji-5 dla piątej rundy rozwoju produktu, być może gałąź prototypu-9 dla dziewiątej rundy eksperymentów i tak dalej.

tags - katalog tags zawiera migawki zatwierdzonych gałęzi i wydań pnia. Ilekroć gałąź zostanie zatwierdzona do scalenia z pniem lub nastąpi zwolnienie pnia, migawka zatwierdzonej gałęzi lub pnia zostanie wykonana pod tagami.

Podejrzewam, że dzięki tagom mogę dość łatwo przeskakiwać w czasie do przodu i do punktów.

BakerTheHacker
źródło
10

Uważam, że to świetny samouczek dotyczące SVN, kiedy patrząc na stronie internetowej autora z OpenCV 2 Computer Vision Application Programming Cookbook i pomyślałem, że powinienem dzielić.

Ma samouczek na temat korzystania z SVN i znaczenia zwrotów „trunk”, „tag” i „branch”.

Cytowany bezpośrednio z jego samouczka:

Bieżąca wersja projektu oprogramowania, nad którym obecnie pracuje Twój zespół, zazwyczaj znajduje się w katalogu o nazwie trunk . W miarę rozwoju projektu deweloper aktualizuje tę wersję, naprawia błędy, dodaje nowe funkcje) i przesyła swoje zmiany w tym katalogu.

W dowolnym momencie możesz zawiesić wersję i przechwycić migawkę oprogramowania na obecnym etapie rozwoju. Zasadniczo odpowiada to oficjalnym wersjom oprogramowania, na przykład tym, które dostarczysz swoim klientom. Te migawki znajdują się w katalogu tagów twojego projektu.

Wreszcie często przydatne jest stworzenie w pewnym momencie nowej linii oprogramowania. Dzieje się tak na przykład, gdy chcesz przetestować alternatywną implementację, w której musisz zmodyfikować oprogramowanie, ale nie chcesz przesyłać tych zmian do głównego projektu, dopóki nie zdecydujesz, czy zastosujesz nowe rozwiązanie. Główny zespół może następnie kontynuować prace nad projektem, podczas gdy inni deweloperzy pracują nad prototypem. Umieścisz te nowe linie rozwoju projektu w katalogu o nazwie oddziały .

Vince
źródło
9

Katalog trunk jest katalogiem, który prawdopodobnie znasz, ponieważ służy do przechowywania najnowszych zmian. Twoja główna baza kodów powinna być w bagażniku.

Katalog oddziałów służy do przechowywania oddziałów, niezależnie od tego, jakie mogą być.

Katalog znaczników służy zasadniczo do oznaczania określonego zestawu plików. Robisz to w przypadku wydań, w których chcesz, aby „1.0” były tymi plikami w tych wersjach, a „1.1” były tymi plikami w tych wersjach. Zazwyczaj nie modyfikujesz tagów po ich utworzeniu. Aby uzyskać więcej informacji o znacznikach, zobacz Rozdział 4. Rozgałęzianie i scalanie (w Kontrola wersji z Subversion ).

bradtgmurray
źródło
9

Jednym z powodów, dla których każdy ma nieco inną definicję, jest to, że Subversion implementuje zerową obsługę gałęzi i tagów. Subversion mówi w zasadzie: przyjrzeliśmy się w pełni funkcjonalnym gałęziom i tagom w innych systemach i nie uznaliśmy ich za przydatne, więc nie wdrożyliśmy niczego. Zamiast tego po prostu zrób kopię do nowego katalogu z konwencją nazw . Wtedy oczywiście każdy może mieć nieco inne konwencje. Aby zrozumieć różnicę między prawdziwym tagiem a zwykłą konwencją kopiowania i nazewnictwa, zobacz wpis Wikipedia Tagi i gałęzie Subversion .

Marsz
źródło
8

Tag = określony odcinek czasu, zwykle używany w wydaniach

Myślę, że to właśnie zwykle oznacza „tag”. Ale w Subversion:

Naprawdę nie mają żadnego formalnego znaczenia. Folder jest folderem SVN.

co wydaje mi się dość mylące: system kontroli wersji, który nie wie nic o gałęziach lub tagach. Z punktu widzenia implementacji myślę, że sposób tworzenia „kopii” przez Subversion jest bardzo sprytny, ale muszę wiedzieć o tym, co nazwałbym nieszczelną abstrakcją .

A może po prostu używałem CVS o wiele za długo.

sme
źródło
Alternatywną perspektywą jest to, że jest odwrotnie, że narzucenie koncepcji znaczników modelowi obiektowemu subversion byłoby nieszczelną abstrakcją w przeciwnym kierunku. Zgaduję, że wiesz, że subwersja była reakcją na CVS, próbą „poprawnego CVS”. Nie mogłem znaleźć odniesienia, ale oryginalni projektanci Subversion powiedzieli, że celowo odrzucili koncepcję tagów w 100%, że rozróżnienie między gałęziami a tagami jest wyłącznie kwestią polityczną. Jeśli zespoły chcą narzucić politykę i konwencję na podstawie modelu obiektowego subversion, niech tak będzie. Właśnie to mamy dzisiaj.
Darryl
6

Myślę, że pewne zamieszanie wynika z różnicy między koncepcją tagu a implementacją w SVN. Tag SVN to gałąź, która jest kopią. Modyfikowanie tagów jest uważane za niewłaściwe, a narzędzia takie jak TortoiseSVN ostrzegą cię, jeśli spróbujesz coś zmodyfikować za pomocą ../tags/ .. na ścieżce.

Denis Phillips
źródło
5

Nie jestem do końca pewien, czym jest „tag”, ale gałąź jest dość powszechną koncepcją kontroli źródła.

Zasadniczo gałąź to sposób pracy na zmianach w kodzie bez wpływu na pień. Powiedz, że chcesz dodać nową funkcję, która jest dość skomplikowana. Chcesz móc wprowadzać zmiany podczas ich wprowadzania, ale nie chcesz, aby wpłynęło to na pień, dopóki nie skończysz z tą funkcją.

Najpierw utworzysz oddział. Zasadniczo jest to kopia pnia w momencie tworzenia oddziału. Następnie wykonasz całą pracę w oddziale. Wszelkie zmiany dokonane w gałęzi nie wpływają na pień, więc pień jest nadal użyteczny, pozwalając innym na kontynuowanie pracy (np. Wprowadzanie poprawek błędów lub drobnych ulepszeń). Po zakończeniu funkcji możesz z powrotem zintegrować gałąź z magistralą. To spowodowałoby przeniesienie wszystkich zmian z gałęzi do pnia.

Istnieje wiele wzorów, które ludzie używają dla gałęzi. Jeśli masz produkt z wieloma głównymi wersjami obsługiwanymi jednocześnie, zazwyczaj każda wersja będzie oddziałem. Tam, gdzie pracuję, mamy oddział kontroli jakości i oddział produkcji. Przed wydaniem naszego kodu do kontroli jakości integrujemy zmiany w gałęzi kontroli jakości, a następnie wdrażamy od tego miejsca. Po wydaniu do produkcji integrujemy się z gałęzi kontroli jakości do gałęzi produkcji, dzięki czemu wiemy, że kod działający w produkcji jest identyczny z testowanym przez kontrolę jakości.

Oto wpis w Wikipedii dotyczący gałęzi , ponieważ prawdopodobnie wyjaśniają rzeczy lepiej niż ja. :)

Herms
źródło
4

Bagażnik : Po zakończeniu każdego sprintu w zwinny wychodzimy z częściowo wysyłanym produktem. Te wydania są przechowywane w bagażniku.

Oddziały : wszystkie równoległe kody rozwoju dla każdego trwającego sprintu są przechowywane w oddziałach.

Tagi : za każdym razem, gdy wydajemy wersję beta produktu częściowo wysyłanego, tworzymy dla niego tag. To daje nam kod, który był dostępny w tym momencie, pozwalając nam wrócić do tego stanu, jeśli jest to wymagane w pewnym momencie podczas programowania.

Ujjwal
źródło
To jest twój szczególny obieg pracy, nie ma on ogólnego zastosowania.
Jason S
4

Dla osób zaznajomionych z GIT master w GIT jest równoważny pnia w SVN.

Oddział i znacznik mają tę samą terminologię w GIT i SVN.

Kwiat pustyni
źródło