Dlaczego użytkownicy Git twierdzą, że Subversion nie ma całego kodu źródłowego lokalnie?

23

Mówię tylko o tym, co przeczytałem na SO, więc wybacz mi, ale wszystko, co czytam, mówi, że jedną z głównych zalet Git nad Subversion jest to, że Git przekazuje cały kod źródłowy deweloperowi lokalnie, nie musząc nic robić na serwer.

Przy ograniczonym użyciu SVN i TortoiseSVN miałem cały kod źródłowy, a przynajmniej tak mi się wydawało. Na przykład mam stronę internetową. Przesyłam go do SVN. Nadal prowadzę witrynę lokalnie, prawda? Jeśli ktoś zgłosi zmianę, a ja nie będę połączony, nie będzie miało znaczenia, czy mam Git, czy nie, dopóki nie połączę się ponownie z serwerem.

Nie rozumiem. Nie proszę o powtórzenie jednego z drugim oprócz tego jednego punktu.

Jasio
źródło
2
Nie chodzi o to, że masz cały kod źródłowy lokalnie, ale o to, że masz lokalnie całą historię repozytorium. Dzięki temu wszystkie interakcje z repozytorium inne niż synchronizacja serwerów są znacznie szybsze.
stonemetal

Odpowiedzi:

69

Przesłana przez ciebie przesłanka jest naprawdę błędna:

jedną z głównych zalet Git nad Subversion jest to, że Git przekazuje cały kod źródłowy deweloperowi lokalnie

Zarówno Subversion, jak i Git, masz kod źródłowy lokalnie. Dzięki Git masz zarówno kod źródłowy, jak i repozytorium na komputerze lokalnym.

To idzie mniej więcej tak.

Obalenie:

Twój kod <-> The Repository

Git:

Twój kod <-> Twoje lokalne repozytorium <-> Zdalne repozytorium (... <-> inne zdalne repozytorium itd.)

Jedną z korzyści uzyskanych z tej struktury jest to, że nadal możesz korzystać z kontroli źródła i zatwierdzać lokalne zmiany w lokalnym repozytorium bez zakłócania pracy innych członków zespołu (którym udostępniasz zdalne repozytorium).

Z Subversion będziesz musiał albo ryzykować zepsucie kompilacji dla innych ludzi, albo cierpieć z powodu długotrwałego rozwoju lokalnego bez jakiejkolwiek kontroli źródła, co kończy się ogromnym zatwierdzeniem (lub bardziej prawdopodobne cofnięciem).

Z drugiej strony w Git możesz swobodnie zatwierdzić te zmiany w swoim lokalnym repozytorium, przeglądać logi i pliki różnic lub zmiany, i tylko wtedy, gdy czujesz, że jest gotowy do udostępnienia zespołowi, wypchnij zmiany z lokalnego repozytorium do zdalnego.

Goran Jovic
źródło
10
To bardzo miła odpowiedź i naprawdę uderza w dom z „... ryzykując złamanie kompilacji dla innych ludzi lub cierpiąc z powodu długotrwałego rozwoju lokalnego bez jakiejkolwiek kontroli źródła ...”
Charles Sprayberry
1
@cspray: Dzięki! Jestem pewien, że są też inne korzyści, ale to największy ból, jaki miałem z Svn.
Goran Jovic
git FTW (pozostało jeszcze 8 ...)
Trevor Boyd Smith
2
@ DanNeely: W rzeczywistości tak jest - OP zapytał o twierdzenie, które gdzieś przeczytał, a odpowiedź brzmi: to po prostu nieprawda (zobacz pierwszą część mojej odpowiedzi). Druga część jest jedynie wyjaśnieniem tego, co ten, kto złożył roszczenie, prawdopodobnie chciał powiedzieć i dlaczego.
Goran Jovic
1
@Giorgio: Wypróbuj, a dowiesz się :) Poważnie, nie sądzę, że kiedykolwiek udało mi się to zrobić bez problemów (oprócz całkowicie ręcznego scalania, które w pewnym sensie pokonuje cel narzędzia)
Goran Jovic,
17

Git lub Mercurial przechowują całe twoje repozytorium lokalnie ze wszystkimi wersjami i nazwanymi oddziałami. Subversion przechowuje tylko jeden - zwykle rewizję głowy. Dzięki Git i Mercurial możesz uzyskać dostęp do pełnego repozytorium (tj. Bieżącego kodu źródłowego i jego historii), nawet gdy twoja sieć ulegnie awarii z SVN, jesteś ograniczony do ostatniej wersji, którą zaktualizowałeś.

Amenti
źródło
1
@Murph Thanks. Właśnie o to mi chodziło. Próbowałem to wyjaśnić.
Amenti
Nie chodzi tylko o to, czy masz połączenie sieciowe z serwerem, czy nie; lokalne IO jest znacznie szybsze i ma mniejsze opóźnienie niż sieciowe IO, co sprawia, że ​​badanie historii lub obwinianie pliku jest znacznie szybsze (ostrzeżenie o winie TrotiseSVN „Proszę czekać - może to potrwać kilka minut. Poważnie!”). Kompromis polega na tym, że posiadanie całej historii lokalnej może wymagać znacznie więcej miejsca na dysku w większych repozytoriach; może to być problematyczne na laptopach, jeśli nie można po prostu dodać dodatkowego dysku w celu uzupełnienia mniejszego dysku SSD niepowodującego bankructwa.
Dan Neely,
@ Komentarz DanNeely był prawdopodobnie uzasadniony w 2012 roku, ale 4 lata później prawie niemożliwe jest znalezienie projektu git, który mógłby zająć dowolną znaczną część dysku SSD
Igor Stoppa
7

Krótka odpowiedź brzmi: z git masz cały kod źródłowy, z subversion masz całą najnowszą wersję kodu źródłowego.

Git przechowuje lokalnie kopię całej historii Twojego repozytorium. Dzięki subversion cała historia jest na serwerze.

Bryan Oakley
źródło
2

Myślę, że możesz dostać się do tego, że w SVN wszystkie twoje działania wymagają komunikacji z serwerem, czego nie robi GIT. W przypadku SVN, jeśli chcesz rozgałęzić się, rozgałęziasz się na serwerze i ściągasz tę gałąź. Dzięki GIT możesz utworzyć oddział lokalny bez wiedzy o tym „serwera”.

Masz rację mówiąc, że masz kod źródłowy zarówno w SVN, jak i GIT, ale w przypadku GIT nie musi istnieć scentralizowany serwer, który również zawiera kod źródłowy. Dzięki GIT możesz być JEDYNYM człowiekiem z kodem źródłowym, ale nadal możesz wykonywać wszystkie funkcje, które zrobiłbyś z typowym VCS.

Słyszałem argumenty przeciwko GIT i myślę, że może to pomóc w twoim pytaniu, mówiąc, że skoro nie musisz się zobowiązać do centralnego repozytorium, jesteś właścicielem swojego kodu źródłowego, dopóki go nie zatwierdzisz i nie prześlesz na serwer, jeśli masz jeden. W przypadku SVN jedynym sposobem na kontrolę wersji jest zatwierdzenie na serwerze, ale dzięki GIT możesz potencjalnie zachować wszystko na komputerze lokalnym, a jeśli coś pójdzie nie tak, możesz „stracić wszystko”, nawet jeśli równie łatwo możesz stracisz wszystkie zmiany w SVN, jeśli nie zatwierdziłeś i twój dysk również się zawiesił.

David Peterman
źródło
1

mówiąc, że ponieważ nie musisz zatwierdzać centralnego repozytorium, jesteś właścicielem swojego kodu źródłowego, dopóki go nie zatwierdzisz i nie prześlesz na serwer, jeśli taki masz. W przypadku SVN jedynym sposobem na kontrolę wersji jest zatwierdzenie na serwerze, ale dzięki GIT możesz potencjalnie zachować wszystko na komputerze lokalnym, a jeśli coś pójdzie nie tak, możesz „stracić wszystko”, nawet jeśli równie łatwo możesz stracisz wszystkie zmiany w SVN, jeśli nie zatwierdziłeś i twój dysk również się zawiesił.

Jeśli naciskasz codziennie, ryzyko powinno być niewielkie. Ale jeśli jesteś zmuszony codziennie zatwierdzać na serwerze SVN, to pod koniec dnia możesz zrobić wszystko w jednym dużym zestawie zmian, który nie dzieli każdej zmiany na małe kroki. Z git zachęca się do dokonywania wielu małych zmian. Podczas wypychania, jeśli wymagane jest scalanie, spróbuj połączyć i wypchnij. Jeśli nie możesz w tej chwili scalić, możesz przekazać do nowej gałęzi lub innego repozytorium na serwerze.

linquize
źródło