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.
Odpowiedzi:
Przesłana przez ciebie przesłanka jest naprawdę błędna:
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.
źródło
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ś.
źródło
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.
źródło
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ł.
źródło
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.
źródło