Git nie jest lepszy niż Subversion. Ale też nie jest gorzej. To jest inne.
Najważniejsza różnica polega na tym, że jest ona zdecentralizowana. Wyobraź sobie, że jesteś programistą w drodze, rozwijasz się na swoim laptopie i chcesz mieć kontrolę nad źródłem, aby móc cofnąć się o 3 godziny.
Z Subversion masz problem: repozytorium SVN może znajdować się w miejscu, do którego nie możesz dotrzeć (w twojej firmie i nie masz w tej chwili internetu), nie możesz zatwierdzić. Jeśli chcesz zrobić kopię swojego kodu, musisz go dosłownie skopiować / wkleić.
Z Git nie masz tego problemu. Twoja lokalna kopia jest repozytorium i możesz się do niej zobowiązać i uzyskać wszystkie korzyści kontroli źródła. Gdy odzyskasz łączność z głównym repozytorium, możesz dokonać na nim zgody.
Na początku wygląda to dobrze, ale należy pamiętać o dodatkowej złożoności tego podejścia.
Git wydaje się być „nową, błyszczącą, fajną” rzeczą. Nie jest to wcale złe (istnieje powód, dla którego Linus napisał to dla rozwoju jądra Linuksa), ale czuję, że wiele osób wskakuje na pociąg "Distributed Source Control" tylko dlatego, że jest nowy i jest napisany przez Linusa Torvaldsa, w rzeczywistości wiedząc dlaczego / jeśli jest lepiej.
Subversion ma problemy, ale także Git, Mercurial, CVS, TFS lub cokolwiek innego.
Edycja: Więc ta odpowiedź ma już rok i wciąż generuje wiele pozytywnych opinii, więc pomyślałem, że dodam więcej wyjaśnień. W ciągu ostatniego roku od napisania tego tekstu Git zyskał duży rozpęd i wsparcie, zwłaszcza że strony takie jak GitHub naprawdę się rozkręciły. Obecnie używam Git i Subversion i chciałbym podzielić się osobistymi spostrzeżeniami.
Po pierwsze, Git może być na początku bardzo mylący, gdy pracuje zdecentralizowany. Co to jest pilot? i jak poprawnie skonfigurować początkowe repozytorium? są dwa pytania, które pojawiają się na początku, szczególnie w porównaniu do prostego „SVNADMIN” SVN, „Git init” Gita może przyjmować parametry - gołe i - udostępnione, co wydaje się być „właściwym” sposobem na skonfigurowanie scentralizowanego magazyn. Są ku temu powody, ale dodaje to złożoności. Dokumentacja polecenia „checkout” jest bardzo myląca dla osób, które się zmieniają - „właściwym” sposobem wydaje się być „git clone”, podczas gdy „git checkout” wydaje się zmieniać gałęzie.
Git NAPRAWDĘ świeci, gdy jesteś zdecentralizowany. Mam w domu serwer i laptopa w podróży, a SVN po prostu nie działa tutaj dobrze. W przypadku SVN nie mogę mieć lokalnej kontroli źródła, jeśli nie jestem podłączony do repozytorium (Tak, wiem o SVK lub o sposobach kopiowania repozytorium). W przypadku Git jest to i tak tryb domyślny. Jest to jednak dodatkowe polecenie (git commit zatwierdza lokalnie, podczas gdy git push master master wypycha gałąź master do zdalnego o nazwie „origin”).
Jak powiedziano powyżej: Git dodaje złożoności. Dwa tryby tworzenia repozytoriów: pobieranie kontra klonowanie, zatwierdzanie kontra wypychanie ... Musisz wiedzieć, które polecenia działają lokalnie, a które z „serwerem” (zakładam, że większość ludzi nadal lubi centralne „repozytorium główne” ).
Oprzyrządowanie jest nadal niewystarczające, przynajmniej w systemie Windows. Tak, istnieje dodatek Visual Studio AddIn, ale nadal używam git bash z msysgit.
Zaletą SVN jest to, że jest DUŻO łatwiejszy do nauczenia: istnieje Twoje repozytorium, wszystkie zmiany w stosunku do niego, jeśli wiesz, jak tworzyć, zatwierdzać i kasować, i jesteś gotowy do pracy i możesz odbierać takie rzeczy, jak rozgałęzienie, aktualizacja itp. Później na.
Git ma tę zaletę, że jest DUŻO bardziej odpowiedni, jeśli niektórzy programiści nie zawsze są podłączeni do głównego repozytorium. Ponadto jest znacznie szybszy niż SVN. Z tego, co słyszę, obsługa gałęzi i łączenie jest znacznie lepsza (czego należy się spodziewać, ponieważ są to główne powody, dla których została napisana).
Wyjaśnia to również, dlaczego zyskuje tak dużo szumu w Internecie, ponieważ Git doskonale nadaje się do projektów Open Source: po prostu rozwidlaj go, zatwierdzaj zmiany we własnym Fork, a następnie poproś oryginalnego opiekuna projektu o wycofanie zmian. W przypadku Git to po prostu działa. Naprawdę, wypróbuj to na Githubie, to magia.
Widzę także mosty Git-SVN: Centralne repozytorium jest repozytorium Subversion, ale programiści lokalnie współpracują z Git, a następnie most przesyła swoje zmiany do SVN.
Ale nawet z tym długim dodatkiem wciąż podtrzymuję moje podstawowe przesłanie: Git nie jest ani lepszy ani gorszy, jest po prostu inny. Jeśli potrzebujesz „Kontroli źródła offline” i chęci poświęcenia dodatkowego czasu na jej naukę, to fantastyczne. Ale jeśli masz ściśle scentralizowaną kontrolę źródła i / lub starasz się wprowadzić kontrolę źródła w pierwszej kolejności, ponieważ twoi współpracownicy nie są zainteresowani, to prostota i doskonałe oprzyrządowanie (przynajmniej w systemie Windows) SVN świeci.