Po przeczytaniu, że jestem maniakiem Subversion, dlaczego powinienem brać pod uwagę Mercurial, Git lub inne DVCS .
Mam powiązane pytanie uzupełniające. Czytam to pytanie, czytam polecane linki i filmy i widzę korzyści, ale nie widzę ogólnej zmiany myślenia, o której mówią ludzie.
Nasz zespół składa się z 8-10 programistów pracujących na jednej dużej bazie kodu składającej się z 60 projektów. Używamy Subversion i mamy główny bagażnik. Gdy programista rozpoczyna nową sprawę Fogbugz, tworzy gałąź svn, wykonuje pracę nad gałęzią, a po zakończeniu łączy z powrotem do pnia. Czasami mogą pozostać na gałęzi przez dłuższy czas i połączyć pień z gałęzią, aby odebrać zmiany.
Kiedy patrzyłem, jak Linus mówi o ludziach tworzących oddział i nigdy więcej tego nie robią, to wcale nie jesteśmy my. Bez problemu tworzymy prawdopodobnie 50-100 oddziałów tygodniowo. Największym wyzwaniem jest połączenie, ale udało nam się też całkiem nieźle. Staram się łączyć przez case & checkin fogbugz zamiast całego katalogu głównego gałęzi.
Nigdy nie pracujemy zdalnie i nigdy nie tworzymy gałęzi z gałęzi. Jeśli jesteś jedyną osobą pracującą w tej sekcji podstawy kodu, scalanie z łączem głównym przebiega bezproblemowo. Jeśli ktoś inny zmodyfikował tę samą sekcję kodu, scalanie może stać się nieuporządkowane i może być konieczne wykonanie operacji. Konflikty są konfliktami, nie rozumiem, w jaki sposób jakikolwiek system mógłby to zrobić przez większość czasu, chyba że byłby wystarczająco inteligentny, aby zrozumieć kod.
Po utworzeniu gałęzi następujące pobranie plików o rozmiarze ponad 60 KB zajmuje trochę czasu, ale byłby to problem z dowolnym systemem kontroli źródła, którego użyjemy.
Czy jest jakaś korzyść z jakiegokolwiek DVCS, którego nie widzimy, który byłby dla nas bardzo pomocny?
Odpowiedzi:
Przeformułuj swoje pytanie: „Jeśli planujemy używać DVCS tylko w sposób scentralizowany, jakie to ma zalety?” Kiedy pytasz w ten sposób, nie robi tego. Jedna gałąź na zadanie jest niezwykle powszechna w VCS. Jeśli się nad tym zastanowić, to lokalna robocza kopia kodu źródłowego na komputerze dewelopera, która zmienia się niezależnie od pnia przez jeden dzień, jest gałęzią, nawet jeśli nikt tak go nie nazywa. Jedyną różnicą między tym a przepływem pracy jest to, że nadajesz tym gałęziom również stałą nazwę na serwerze centralnym. Nie o takim rozgałęzieniu mówią Linus i inni.
Zrozumienie DVCS wymaga fundamentalnej zmiany myślenia. Musisz zadać sobie pytanie, co byś zrobił z tyloma gałęziami, ile chcesz, które są dzielone z kimkolwiek chcesz i tylko z nimi. Obejmuje to gałęzie widoczne tylko dla ciebie.
Możliwości są nieskończone. Na przykład, co powiesz na dwie osoby pracujące po przeciwnych stronach interfejsu? Muszą regularnie udostępniać sobie kod, ale nie jest jeszcze wystarczająco stabilny, aby udostępnić go wszystkim. Mogą utworzyć gałąź, aby udostępnić się między sobą, a następnie scalić ją z powrotem do centralnego repozytorium, gdy będzie gotowa.
Zdolność do dokonywania pośrednich lokalnych zobowiązań jest tego warta sama. Tego właśnie musisz doświadczyć.
Szybkość uzyskana dzięki lokalnemu repo również jest tego warta sama. Tak, początkowy klon będzie nieuchronnie powolny w dowolnym VCS dla repozytorium plików 60k, ale kiedy już to zrobisz, sprawdzenie nowej gałęzi jest o rząd wielkości szybsze z DVCS.
źródło
W konkretnym przypadku przejście na DVCS nie przynosi żadnych korzyści. Jesteś zadowolony ze swojego istniejącego systemu, robi wszystko, czego potrzebujesz, więc po co przełączać? SVN jest nadal aktywnym projektem Open Source i ma lepszą, bardziej dojrzałą integrację ze wszystkimi głównymi IDE i narzędziami programistycznymi niż hg lub git. Biorąc pod uwagę wielkość zespołu i liczbę projektów, czy naprawdę chcesz poświęcić czas na przejście na nowe narzędzie, gdy istniejące działa dobrze?
Jeśli masz programistów, którzy po prostu nie mogą działać bez DVCS, skieruj ich do bram svn dla hg lub git. Wyjaśnij im, że ich meldunki w repozytorium svn muszą być zgodne z wszelkimi procedurami i procesami stosowanymi przez resztę zespołu. Kolejną zaletą tego podejścia jest to, że prawdziwi fanatycy DVCS, którzy już korzystają z bramek, nie mówiąc, że możesz teraz wyjść z szafy :-).
źródło
Wydaje mi się, że już używasz przepływu pracy, który jest bardzo podobny do przepływu pracy, który wiele osób przyjmuje po rozpoczęciu korzystania z DVCS.
Z twojego punktu widzenia DVCS będzie miał następujące znaczące zalety w stosunku do SVN:
branches
katalog wciąż ma wiele podkatalogów, które nie są już istotne).merge
powrotem wdefault
(trunk
)git
ihg
są na równi z kursem.W tym ostatnim punkcie mówisz
Przechodząc od używania
hg
wyłącznie do używaniasvn
samego, a potem zgitsvn
mojego doświadczenia wynika, że fuzje są znacznie prostsze i bezproblemowe zhg
igitsvn
niż z nimisvn
. Połączenia zsvn
(przynajmniej używaną wersją) powodują znacznie więcej konfliktów, które należy rozwiązać ręcznie.Jednym z powodów, dla których łączenia są trudniejsze w SVN, jest to, że daje tylko dwie opcje dla każdej linii, która się różni,
podczas gdy fuzje z DVCS zazwyczaj dają trzecią opcję, którą jest
Nie lekceważ, jak to jest korzystne, zapewnia znacznie lepszy kontekst dla zmian niż zwykły dwukierunkowy diff.
Podsumowując, proponuję spróbować. Korzystając z narzędzi takich jak
gitsvn
ihgsubversion
, możesz nawet wypróbować je przy użyciu obecnych repozytoriów SVN .Zauważ, że utworzenie klonu jest przede wszystkim królewską PItA, ale kiedy to zrobisz, uzyskasz większość mocy DVCS dzięki istniejącemu CVCS.
źródło
at least the version I've used
. W moim rozumieniu jest to, że najnowsza wersja svn nie zrozumieć o wspólnych przodków, ale nie mam doświadczenia i podejrzewam, że istnieje wiele serwerów tam uruchomione starsze wersje SVN, które mają te same problemy.hg
(i prawie na pewnogit
, ale nie próbowałem tego) możesz wziąć plik z trzema klasami, podzielić go na trzy pliki z klasą, a następnie scalić zmiany między gałęzią z plik „połączony” i gałąź z oddzielnymi plikami, dzięki czemu zmiany poszczególnych klas zostaną zastosowane do poprawnych plików. Czysta magia. * 8 ')svn
scalenia powinny działać, mam własne doświadczenie w tymsvn
wierszu poleceń i SVNKit pod Eclipse, gdzie po prostu pobieranie aktualizacji może powodować „konflikty”, które należy rozwiązać ręcznie za pomocą wycinania i wklejania (Nie mogę łatwo powiedzieć „Chcę obu tych zmian, w tej kolejności).Jest jedna ważna zmiana, którą zauważyłem po takim przejściu: zmieniam gałęzie znacznie częściej i dokonuję częściej, niż mógłbym sobie pozwolić na Subversion. Na przykład istnieje wiele maleńkich gałęzi funkcjonalnych, zorganizowanych w sekwencji, i mogę spędzić miesiące dodając bity do każdej z nich, łatwo ponownie je wszystkie sekwencyjnie zmieniając ciągle. Zmiana kolejności scalania gałęzi funkcjonalności jest trywialna.
Ale tak naprawdę nie odeszłam od Subversion. Po prostu używam git jako mojego lokalnego klienta SVN.
źródło