Uwaga: Zobacz „EDYCJA”, aby uzyskać odpowiedź na bieżące pytanie
Przede wszystkim przeczytaj Subversion Re-education Joela Spolsky'ego. Myślę, że na większość twoich pytań tam znajdziesz odpowiedź.
Kolejna rekomendacja, wykład Linusa Torvaldsa na Git: http://www.youtube.com/watch?v=4XpnKHJAok8 . Ten drugi może również odpowiedzieć na większość twoich pytań i jest to dość zabawne.
BTW, coś, co uważam za dość zabawne: nawet Brian Fitzpatrick i Ben Collins-Sussman, dwóch oryginalnych twórców subwersji, powiedział w jednym z rozmów Google „przepraszam za to”, odnosząc się do subwersji gorszej od merkurialnej (i ogólnie DVCS).
Teraz, IMO i ogólnie, dynamika zespołu rozwija się bardziej naturalnie z każdym DVCS, a wyjątkową korzyścią jest to, że możesz dokonywać zleceń offline, ponieważ implikuje następujące rzeczy:
- Nie zależy od serwera i połączenia, co oznacza szybsze czasy.
- Nie będąc niewolnikiem miejsc, w których można uzyskać dostęp do Internetu (lub VPN) tylko po to, aby móc się zobowiązać.
- Każdy ma kopię zapasową wszystkiego (plików, historii), nie tylko serwer. Oznacza to, że każdy może zostać serwerem .
- Możesz zobowiązać się kompulsywnie, jeśli chcesz, bez zakłócania kodu innych użytkowników . Zatwierdzenia są lokalne. Zobowiązując się, nie stąpacie sobie po palcach. Nie psujesz kompilacji ani środowisk innych tylko przez zaangażowanie.
- Osoby bez „dostępu do zatwierdzania” mogą zatwierdzać (ponieważ zatwierdzanie w DVCS nie oznacza przesyłania kodu), obniżając barierę dla wkładów, możesz zdecydować o wycofaniu ich zmian lub nie jako integrator.
- Może wzmocnić naturalną komunikację, ponieważ DVCS sprawia, że jest to niezbędne ... w zamian za to, co masz, to zatwierdzanie ras, które wymuszają komunikację, ale utrudniają twoją pracę.
- Współtwórcy mogą tworzyć zespoły i obsługiwać własne scalanie, co oznacza mniej pracy dla integratorów.
- Współtwórcy mogą mieć własne oddziały bez wpływu na innych (ale w razie potrzeby mogą je udostępniać).
O twoich punktach:
- Scalanie piekła nie istnieje w DVCSland; nie trzeba się tym zajmować. Zobacz następny punkt .
- W DVCS każdy reprezentuje „gałąź”, co oznacza, że połączenia są za każdym razem, gdy wprowadzane są zmiany. Nazwane gałęzie to kolejna sprawa.
- Jeśli chcesz, możesz nadal korzystać z ciągłej integracji. Nie jest to konieczne IMHO, po co dodawać złożoności? Po prostu kontynuuj testowanie w ramach swojej kultury / polityki.
- Mercurial jest szybszy w niektórych rzeczach, git jest szybszy w innych. W zasadzie nie zależy to od DVCS, ale od ich konkretnych implementacji AFAIK.
- Każdy zawsze będzie miał pełny projekt, nie tylko ty. Rozproszona rzecz ma związek z tym, że możesz zatwierdzać / aktualizować lokalnie, udostępnianie / pobieranie z komputera nazywa się pchaniem / ciągnięciem.
- Ponownie przeczytaj Ponowną edukację Subversion. DVCS są łatwiejsze i bardziej naturalne, ale różnią się, nie próbuj myśleć, że cvs / svn === jest podstawą wszystkich wersji.
Włączyłem trochę dokumentacji do projektu Joomla, aby pomóc w głoszeniu migracji do DVCS, i tutaj zrobiłem kilka diagramów ilustrujących scentralizowane vs rozproszone.
Scentralizowane
Rozpowszechniany w praktyce ogólnej
Rozłożone w pełni
Widzicie na diagramie, że wciąż istnieje „scentralizowane repozytorium”, a to jeden z ulubionych argumentów fanów scentralizowanej wersji: „nadal jesteś scentralizowany”, a nie, nie jesteś, ponieważ „scentralizowane” repozytorium to tylko repozytorium wszyscy zgadzają się na (np. oficjalne repozytorium github), ale może się to zmienić w dowolnym momencie.
Jest to typowy przepływ pracy w projektach typu open source (np. Projekt o dużej współpracy) z wykorzystaniem DVCS:
Bitbucket.org jest w pewnym sensie odpowiednikiem github dla merkurialu, wiedz, że mają nieograniczone prywatne repozytoria z nieograniczoną przestrzenią, jeśli twój zespół jest mniejszy niż pięć, możesz użyć go za darmo.
Najlepszym sposobem, aby przekonać się do korzystania z DVCS, jest wypróbowanie DVCS, każdy doświadczony programista DVCS, który używał svn / cvs, powie ci, że warto i że nie wiedzą, jak przetrwali bez niego cały czas.
EDYCJA : Aby odpowiedzieć na drugą edycję, mogę tylko powtórzyć, że z DVCS masz inny przepływ pracy, radzę nie szukać powodów, aby nie wypróbować go z powodu najlepszych praktyk , to tak, jakby ludzie twierdzili, że OOP nie jest konieczne, ponieważ potrafią obejść złożone wzorce projektowe za pomocą tego, co zawsze robią z paradygmatem XYZ; i tak możesz skorzystać.
Wypróbuj, a zobaczysz, jak praca w „oddziale prywatnym” jest rzeczywiście lepszą opcją. Jednym z powodów, dla których mogę powiedzieć, dlaczego ta ostatnia jest prawdziwa, jest to, że tracisz strach przed popełnieniem , pozwalając ci popełnić w dowolnym momencie, kiedy uznasz to za stosowne i działa w bardziej naturalny sposób.
Jeśli chodzi o „łączenie piekła”, mówicie „chyba, że eksperymentujemy”, mówię „nawet jeśli eksperymentujecie + zachowując + pracując jednocześnie w odnowionej wersji 2.0 ”. Jak mówiłem wcześniej, piekło nie istnieje, ponieważ:
- Za każdym razem, gdy zatwierdzasz, generujesz nienazwaną gałąź i za każdym razem, gdy twoje zmiany spełniają zmiany innych osób, następuje naturalne scalenie.
- Ponieważ DVCS zbierają więcej metadanych dla każdego zatwierdzenia, podczas łączenia występuje mniej konfliktów ... więc można nawet nazwać to „inteligentnym scaleniem”.
- Kiedy wpadasz na konflikty scalania, możesz użyć tego:
Poza tym rozmiar projektu nie ma znaczenia, kiedy przerzuciłem się z subwersji, faktycznie widziałem już korzyści podczas pracy w pojedynkę, wszystko było w porządku. Do Zestawienia zmian (nie dokładnie wersji, ale specyficzny zestaw zmian dla konkretnych plików, które obejmują popełnić, odizolowane od stanu kodzie) pozwalają wizualizować dokładnie to, co masz na myśli robiąc to, co robiłeś do konkretnej grupy plików, nie cała baza kodów.
Odnośnie sposobu działania zestawów zmian i zwiększenia wydajności. Spróbuję to zilustrować przykładem, który chciałbym podać: przełącznik projektu mootools z svn zilustrowany na ich grafie sieciowym github .
Przed
Po
To, co widzisz, to to, że programiści mogą skoncentrować się na własnej pracy podczas uruchamiania, bez obawy przed złamaniem kodu innych, martwią się o złamanie kodu innych po wypchnięciu / wyciągnięciu (DVCS: najpierw zatwierdzenie, następnie push / pull, a następnie aktualizacja ), ale ponieważ scalanie jest tutaj mądrzejsze, często nigdy nie robią ... nawet jeśli występuje konflikt scalania (co jest rzadkie), spędzasz tylko 5 minut lub mniej na naprawie.
Radzę ci poszukać kogoś, kto wie, jak używać mercurial / git i powiedzieć mu, żeby wyjaśnił ci to. Spędzając około pół godziny z kilkoma przyjaciółmi w wierszu poleceń, używając mercurial na naszych komputerach stacjonarnych i kontach bitbucket, pokazując im, jak się łączyć, a nawet wymyślając konflikty, aby zobaczyć, jak naprawić w absurdalnie dużej ilości czasu, byłem w stanie pokazać im prawdziwa moc DVCS.
Na koniec, polecam ci użycie mercurial + bitbucket zamiast git + github, jeśli pracujesz z Windowsem. Mercurial jest również nieco prostszy, ale git jest potężniejszy do bardziej złożonego zarządzania repozytorium (np. Git rebase ).
Niektóre dodatkowe zalecane odczyty: