Sprzedaj mi rozproszoną kontrolę wersji

Znam 1000 podobnych tematów. Czytam co najmniej 5 wątków tutaj, ale dlaczego nadal nie jestem przekonany o DVCS?

Mam tylko następujące pytania (zauważ, że martwię się tylko o projekty Java)

  • Jaka jest korzyść lub wartość lokalnie? Co? naprawdę? Wszystkie nowoczesne IDEs pozwala na śledzenie Twoich zmian? a w razie potrzeby ty może przywrócić określoną zmianę. Ponadto mają funkcję etykietowania twoje zmiany / wersje na Poziom IDE!?
  • Co jeśli rozwalę dysk twardy? gdzie czy moje lokalne repozytorium poszło? (więc jak to jest fajne w porównaniu do meldowania się do centralnego repo?) Praca w trybie offline lub w samolocie. W czym problem?In order for me aby zbudować wydanie z moimi zmianami, I musi w końcu połączyć się z centralne repozytorium. Do tego czasu nie ma znaczenia, jak śledzę moje zmiany lokalnie.
  • ok Linus Torvalds oddaje swoje życie Git i nienawidzi wszystkiego innego. Czy to wystarczy na ślepo sing pochwały? Linus mieszka w innym świat w porównaniu z deweloperami offshore w moim średniej wielkości projekcie?

Pitch me!

Author: Martin Geisler, 2010-04-02

10 answers

Niezawodność

Jeśli twój dysk twardy po cichu zacznie uszkadzać dane, cholernie dobrze chcesz o tym wiedzieć. Git pobiera hasze SHA1 wszystkiego, co zatwierdzisz. MASZ 1 central repo z SVN i jeśli jego bity zostaną po cichu zmodyfikowane przez wadliwy kontroler HDD, nie będziesz o tym wiedział, dopóki nie będzie za późno.

A skoro masz 1 Central repo, to właśnie zmarnowałeś swoją jedyną linię życia.

Z git, każdy ma identyczne repo, wraz z historią zmian, i jego zawartość może być w pełni zaufana ze względu na SHA1 jego pełnego obrazu. Więc jeśli tworzysz kopię zapasową 20 bajtów SHA1 swojej głowy, możesz być pewien, że kiedy klonujesz z jakiegoś niezaufanego lustra, masz dokładnie ten sam repo, który straciłeś!

Rozgałęzianie (i przestrzeń nazw)

Kiedy używasz scentralizowanego repo, wszystkie oddziały są tam, aby świat mógł zobaczyć. Nie można tworzyć prywatnych oddziałów. Musisz stworzyć gałąź, która nie koliduje już z inną globalną nazwą.

"test123 -- cholera, już jest test123. Spróbujmy test124."

I każdy musi widzieć te wszystkie gałęzie z głupimi nazwami. Musisz podporządkować się Polityce firmy, która może iść zgodnie z zasadą "nie twórz gałęzi, chyba że naprawdę musisz", co uniemożliwia wiele swobód, które uzyskasz z Gitem.

To samo z committing. Kiedy dokonujesz commitu, lepiej być naprawdę pewnym, że Twój kod działa. W przeciwnym razie zepsujesz konstrukcję. No intermediate / align = "left" / Bo wszyscy idą do centrali.

Z Gitem nie masz nic z tych bzdur. Rozgałęź i zatwierdzaj lokalnie wszystko, co chcesz. Kiedy jesteś gotowy, aby ujawnić swoje zmiany reszcie świata, poprosisz ich o wyciągnięcie z Ciebie, lub pchasz je do jakiegoś "głównego" repo Gita.

Wydajność

Ponieważ twój repo jest lokalny, wszystkie operacje VCS są szybkie i nie wymagają podróży w obie strony i transferu z centralnego serwera! git log nie musi przejść przez sieć do znajdź historię zmian. SVN tak. To samo dotyczy wszystkich innych poleceń, ponieważ wszystkie ważne rzeczy są przechowywane w jednym miejscu!

Obejrzyj rozmowę Linusa dla tych i innych korzyści nad SVN.

 13
Author: Alex Budovski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-03 09:58:45

Byłem tam, gdzie teraz jesteście, sceptycznie nastawiony do wykorzystania rozproszonej kontroli wersji. Przeczytałem wszystkie artykuły i znałem teoretyczne argumenty, ale nie byłem przekonany.

Aż pewnego dnia wpisałem git init i nagle znalazłem się w repozytorium git.

Sugeruję, żebyś zrobił to samo-po prostu spróbuj. Zacznij od małego projektu hobbystycznego, aby się z nim uporać. Następnie zdecyduj, czy warto użyć go do czegoś większego.
 14
Author: Thomas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-03 10:07:42

Jestem programistą Mercurial i pracowałem jako konsultant Mercurial. Więc uważam Twoje pytania za bardzo interesujące i mam nadzieję, że na nie odpowiem:

  • Jaka jest zaleta lub wartość zaangażowania lokalnie? [...]

Masz rację, że IDE mogą śledzić lokalne zmiany poza prostym cofaniem/ponawianiem w dzisiejszych czasach. Jednak nadal istnieje luka w funkcjonalności między tymi migawkami plików a pełnym systemem kontroli wersji.

Lokalne commity dają masz możliwość przygotowania swojej" historii " lokalnie przed przesłaniem jej do recenzji. Często pracuję nad zmianami obejmującymi 2-5 commitów. Po dokonaniu commit 4, mogę wrócić i nieco zmienić commit 2 (Być może zobaczyłem błąd w commit 2 po dokonaniu commit 4). W ten sposób będę pracował nie tylko nad najnowszym kodem, ale nad kilkoma ostatnimi commitami. Jest to trywialnie możliwe, gdy wszystko jest lokalne, ale staje się trudniejsze, jeśli potrzebujesz synchronizacji z centralnym serwerem.

    Co jeśli rozwalę dysk twardy? [...] więc jak to jest fajne w porównaniu do meldowania się w centralnym repo?

Wcale nie fajne! :-)

Jednak, nawet w przypadku centralnego repo, nadal musisz martwić się o niezarejestrowane dane W kopii roboczej. W związku z tym twierdzę, że i tak powinieneś mieć rozwiązanie zapasowe.

Z mojego doświadczenia wynika, że ludzie często mają większe porcje niezarejestrowanych danych w swoich kopiach roboczych z scentralizowany system. Klienci powiedzieli mi, jak starali się przekonać deweloperów do zaangażowania co najmniej raz w tygodniu.

Zmiany są często pozostawiane niezatwierdzone, ponieważ:

  1. Nie są jeszcze skończone. W kodzie mogą być instrukcje debug print, mogą być niekompletne funkcje itp.

  2. Popełnienie trafiłoby do trunk i to jest niebezpieczne z scentralizowanym systemem, ponieważ wpływa na wszystkich else.

  3. Zatwierdzenie wymagałoby najpierw połączenia z centralnym repozytorium. To scalanie może być onieśmielające, jeśli wiesz, że w kodzie zaszły inne sprzeczne zmiany. Scalanie może być po prostu irytujące, ponieważ może nie być wszystko zrobione ze zmianami i wolisz pracować ze znanego-dobrego stanu.

  4. Zatwierdzanie może być powolne, gdy trzeba rozmawiać z przeciążonym serwerem centralnym. Jeśli znajdujesz się w lokalizacji offshore, są jeszcze wolniejsze.

Jesteś absolutną poprawnością jeśli uważasz, że powyższe nie jest tak naprawdę kwestią scentralizowanej kontroli wersji kontra dystrybuowanej. Z CVCS, ludzie mogą pracować w oddzielnych oddziałach, a tym samym trywialnie uniknąć 2 i 3 powyżej. Z oddzielną gałęzią throw-away, mogę również commit tyle, ile chcę, ponieważ mogę utworzyć inną gałąź, w której zatwierdzam bardziej dopracowane zmiany(rozwiązując 1). Commity mogą być jednak powolne, więc 4 może być nadal stosowane.

Ludzie osoby korzystające z DVC często i tak wysyłają swoje" lokalne " commity do zdalnego serwera jako rozwiązanie do tworzenia kopii zapasowych. Nie pcha się do głównego serwera, na którym pracuje reszta zespołu, ale do innego (ewentualnie prywatnego) serwera. W ten sposób mogą pracować w izolacji i nadal przechowywać kopie zapasowe poza siedzibą.

    Praca w trybie offline lub w samolocie. [...]
Tak, nigdy nie lubiłem tego argumentu. Mam dobre połączenie z Internetem 99% czasu i nie latam wystarczy, aby to było problemem: -) Jednak prawdziwym argumentem nie jest to, że jesteś offline, ale to, że możesz udawać, że jesteś offline. Dokładniej mówiąc, możesz pracować w izolacji bez konieczności natychmiastowego wysyłania zmian do centralnego repozytorium.

Narzędzia DVCS są zaprojektowane wokół idei, że ludzie mogą pracować w trybie offline. Ma to wiele ważnych konsekwencji:

  • Łączenie gałęzi staje się rzeczą naturalną. Kiedy ludzie mogą pracować w równolegle, forki naturalnie pojawią się na wykresie commit. Narzędzia te muszą być zatem naprawdę dobre w łączeniu gałęzi. Narzędzie takie SVN nie jest zbyt dobre w łączeniu!

    Git, Mercurial i inne narzędzia DVCSłączą się lepiej , ponieważ mają więcej testów w tym obszarze, a nie bezpośrednio, ponieważ są dystrybuowane.

  • Więcej elastyczności. Dzięki DVCS masz swobodę push / pull zmian między dowolnymi repozytoriami. Będę często push / pull między moim komputerem w domu i pracy, bez użycia prawdziwego centralnego serwera. Kiedy rzeczy są gotowe do publikacji, pcham je do miejsca takiego jak Bitbucket. Synchronizacja wielu lokalizacji nie jest już "funkcją korporacyjną", jest funkcją wbudowaną. Więc jeśli masz lokalizację off-shore, mogą skonfigurować lokalne repozytorium hub i użyć tego między sobą. Następnie możesz zsynchronizować godziny lokalnych koncentratorów, codziennie lub kiedy ci to odpowiada. Wymaga to nic więcej niż cronjob, który działa hg pull lub git fetch w w regularnych odstępach czasu.
  • Lepsza skalowalność, ponieważ więcej logiki jest po stronie klienta. Oznacza to mniej konserwacji na centralnym serwerze i bardziej wydajne narzędzia po stronie klienta.

    Z DVCS, spodziewam się być w stanie zrobić wyszukiwanie słów kluczowych poprzez zmiany kod (nie tylko komunikaty commit). Dzięki scentralizowanemu narzędziu zwykle musisz skonfigurować dodatkowe narzędzie do indeksowania.

 10
Author: Martin Geisler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:33

DVCS jest dla mnie bardzo interesujący:

  • Dodaje zupełnie nowy wymiar do kontroli źródła proces: publication .
    Nie tylko masz merge workflow , ale także publication workflow (do którego repozytorium będziesz naciskał/wyciągał), a to może mieć wiele implikacji w term:

    • cykl rozwoju (z repozytoriami tworzonymi tylko dla określonego typu commitów, jak ten, który ma być wydany do profuctions, do celów rozmieszczenia)
    • zadania solo (można wypchnąć i zaktualizować kopię zapasową repo, nawet w formie tylko jednego pliku)
    • inter-dependencies project (kiedy zespół projektu a czeka, aż Team porject B W końcu powierzy się centralnemu repo, może poprosić B, aby "przekazał" pośredni rozwój jako załączony plik zip w mailu. Teraz wystarczy, że A doda B repo jako potencjalnego pilota, pobierze go i rzuci okiem)
  • Przynosi nową drogę z produkcja / konsumowanie poprawek z:

    • a pasywny sposób tworzenia nowych wersji (tylko te, które aktywnie pobierają z twojego repo, zobaczą je w swoich gałęziach)
    • aktywny sposób spożywania zmian od innych (poprzez dodanie ich repo jako zdalnego i pobieranie/łączenie tego, czego od nich potrzebujesz).

Oznacza to, że nie polegasz na innych dostarczających swoją pracę do centralnego repo, ale możesz mieć bardziej bezpośrednie relacje z różnymi aktorami i ich repo.

 6
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:16

Twój główny argument o IDE robi śledzenie dla Ciebie jest fałszywy. Większość IDE w rzeczywistości nie ma żadnej takiej funkcjonalności poza nieograniczonymi poziomami cofania. Pomyśl o gałęziach, połączeniach, rewertach, komunikatach commit (log) i tym podobnych, a założę się, że nawet IDE, do którego się odnosiłeś, nie jest wystarczające. Szczególnie wątpię, by śledziło to twoje commity-prawdopodobnie na kilku różnych gałęziach, nad którymi pracujesz-i właściwie wpychało je do repozytorium po uruchomieniu.

Jeśli Twoje IDE właściwie robi to wszystko, w rzeczywistości nazwałbym to rozproszonym systemem kontroli wersji sam w sobie.

Wreszcie, jeśli centralne repozytorium umrze z jakiegokolwiek powodu (Twój usługodawca zbankrutował, był pożar, haker go uszkodził,...), masz pełną kopię zapasową na każdym komputerze, który niedawno wyciągnął repozytorium.

EDIT: możesz używać DVCS tak jak scentralizowane repozytorium, a ja nawet polecam to zrobić przynajmniej dla małych i średnich projektów. Mając jedno centralne "autorytatywne" repozytorium, które jest zawsze online, upraszcza wiele rzeczy. A gdy ta maszyna ulegnie awarii, możesz tymczasowo przełączyć się na jedną z innych maszyn, dopóki serwer nie zostanie naprawiony.

 2
Author: Tronic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-01 22:18:15

Jeśli nie widzisz wartości lokalnej historii lub lokalnych budów, to nie jestem pewien, czy jakakolwiek ilość odpowiedzi na pytanie zmieni Twoje zdanie.

Cechy historii IDE są ograniczone i niezdarne. W niczym nie przypominają pełnej funkcji.

Dobrym przykładem tego, jak te rzeczy są używane w różnych projektach Apache. Mogę zsynchronizować repo git z repo Apache svn. Potem mogę pracować przez tydzień w prywatnym oddziale. Mogę obniżyć zmiany z repo. Mogę zgłaszać moje zmiany, detaliczne lub hurtowe. A kiedy skończę, mogę je spakować jako jeden commit.

 1
Author: bmargulies,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-01 21:51:22

Ciekawe pytanie.

Nie jestem doświadczonym użytkownikiem DVCS, ale moja ograniczona ekspozycja była bardzo pozytywna.

Uwielbiam możliwość dwuetapowego commit. Pasuje mi.

Niektóre zalety, które przychodzą na myśl:

  1. Lepiej połączyć wsparcie. Branch-Merge jest bardziej jak obywatel pierwszej klasy w DVCS, podczas gdy w moim doświadczeniu scentralizowanych rozwiązań, uznałem to za bolesne i podstępne. Śledzenie scalania jest teraz dostępne w svn, ale nadal jest powolne i uciążliwe.

  2. Duże zespoły. DVCS jest nie tylko dla commitów dla pojedynczego użytkownika. Możesz wypychać i ciągnąć zmiany między zespołami, zanim wrócisz do głównego repozytorium (lub nie). Jest to bezcenne dla niektórych smaków współpracy.

  3. Pracując nad funkcjonalnością eksperymentalną, warto często się angażować, ale tylko na krótką metę. Nie chcę zawsze rozgałęziać głównej bazy kodowej, więc miło jest móc odtwarzać i ponownie nagrywać. / Align = "left" / jest przydatny podczas pracy z ciągłą integracją. Jeśli całymi dniami pracuję nad refaktoryzacją, mogę przerwać Kompilacje na niedopuszczalne ramy czasowe, ale nadal chcę śledzić moje zmiany.

Zauważ, że moje doświadczenie z DVCS jest bardziej z Mercurial niż z Git. Korzystając z CVS / SVN, odkryłem, że krzywa uczenia się jest znacznie łatwiejsza dzięki Mercurial (Hg). Niedawno dodana obsługa kodu Google dla Mercurial jest również dobrodziejstwem. ... Posunę się nawet do stwierdzenia, że mój początkowa odpowiedź na Gita była negatywna, ale bardziej z punktu widzenia użyteczności niż cokolwiek wspólnego z DVC

 1
Author: laher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-01 22:04:48

Warto zauważyć, że Subversion prawdopodobnie będzie pobierał w przyszłości takie rzeczy jak commity offline. Oczywiście nie możemy naprawdę porównać tych funkcji do tego, co jest obecnie dostępne, ale może to być bardzo dobry sposób na "korzystanie z DVC w sposób scentralizowany", jak opisano w innych odpowiedziach tutaj.

Kolejny Ostatni post stwierdza, że Subversion nie próbuje stać się DVCS

Te rzeczy prawdopodobnie będą oznaczać, że repozytorium jest nadal scentralizowane, oznacza to, że nie możesz rozłączać rozgałęzień, różnicować starych wersji, ale możesz ustawić commity w kolejce.

 1
Author: Sander Rijken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-03 09:30:36

nic tu nie sprzedam.

* Jaka jest zaleta lub wartość zaangażowania lokalnie? Co? naprawdę? Wszystkie nowoczesne IDE pozwalają na śledzenie zmian? i jeśli wymagane możesz przywrócić określoną zmianę. Mają też funkcja oznaczania zmian / wersji na poziomie IDE!?

Jedyną prawdziwą zaletą jest to, że nie musisz potrzebować łączności z głównym centralnym repozytorium. Ktoś może powiedzieć, że korzyścią Git jest fakt że programista może popełnić lokalnie, przygotowując świetną kombinację łatek, a następnie ciągnąć je do Błogosławionego centralnego repo, ale IMO to jest dość nieciekawe. Programista może użyć prywatnej półki lub gałęzi w repozytorium Subversion do pracy nad swoim zadaniem, a następnie połączyć je z linią główną (np. / trunk) lub inną gałęzią.

Dla mnie głównym minusem jest to, że muszę pobrać i przechowywać całe repozytorium Git na moim komputerze. Dzięki dużemu projektowi z historią looong staje się ból i zajmuje zbyt dużo miejsca.

Kolejną wadą scentralizowania jest to, że Git technicznie nie może śledzić zmian nazw ani operacji kopiowania. Po prostu próbuje odgadnąć, czy plik został przemianowany, czy skopiowany na podstawie zawartości pliku . Prowadzi to do takich śmiesznych przypadków: svn do git migration przechowywanie historii skopiowanego pliku (gość pyta, dlaczego historia pliku została utracona po SVN>GIT migration, ).

• co jeśli rozwalę dysk twardy? gdzie się podziało moje lokalne repozytorium? (so jak to jest fajne w porównaniu do meldowania się w centralnym repo?)

W przypadku Gita, jeśli uszkodziłeś swoje lokalne urządzenie pamięci masowej (HDD, SSD, cokolwiek) i miało zmiany, które nie zostały wyciągnięte lub wypchnięte do Błogosławionego repo Gita, to masz pecha. Właśnie straciłeś swój czas i swój kod. Oprócz tego, awaria dysku twardego z lokalnym Git repo może zatrzymać proces rozwoju na jakiś czas: Linus Torvald ' S SSD breaks, zatrzymuje jądro Linuksa rozwój .

Dzięki scentralizowanej kontroli źródeł, takiej jak SVN, możesz stracić swój ostatni commit tylko dlatego, że cała Twoja praca została już przekazana do centralnego repozytorium do gałęzi, prywatnej półki lub nawet bagażnika. Oczywiście należy upewnić się, że odzyskiwanie po awarii i tworzenie kopii zapasowych zostało wdrożone dla centralnego repo.

• ok Linus Torvalds oddaje życie Gitowi i nienawidzi wszystkiego innego. Czy to wystarczy, by ślepo śpiewać pochwały? Linus mieszka w innym świat w porównaniu do deweloperów offshore w moim projekcie średniej wielkości?

Dla takiego projektu jak jądro Linuksa, które używało Bitkeepera w przeszłości, Git jest najlepszym systemem kontroli źródeł! Ale powiedziałbym, że Git nie pasuje do wszystkich.

Wybieraj mądrze!

 1
Author: bahrep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:34:11

Najprawdopodobniej nikt ci tu niczego nie sprzeda. Jeśli potrzebujesz funkcji Gita, po prostu git init. Jeśli to nie pasuje do ciebie, po prostu nie.

Jeśli nie znasz jeszcze funkcji Gita, wpisz git vs (zwróć uwagę na spację końcową) w wyszukiwarce Google i zobacz wyniki autouzupełniania.

Wolałem Notatnik niż IDE, dopóki nie potrzebowałem funkcji Netbeans. Wygląda na to, że to ta sama sprawa.

Jak wiecie, było wiele udanych projektów bez VC w ogóle.

PS. Sprzedaż Gita narusza jego licencję! ;)

 -1
Author: takeshin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-13 17:37:02