Odpowiedzi:
Oznacza to, że kiedy wykonujesz zatwierdzenie w systemie kontroli wersji, albo wszystko, co chcesz zatwierdzić, przechodzi, LUB nic nie robi.
W CVS, kiedy próbujesz zatwierdzić, możliwe jest, że zatwierdzenie zakończy się powodzeniem na kilku plikach, a następnie zawiedzie na kilku innych (ponieważ zostały zmienione). Powoduje to, że repozytorium znajduje się w niefortunnym stanie, ponieważ nie ma połowy twojego zatwierdzenia i jest prawdopodobne, że pozostawiłeś rzeczy w stanie, w którym nie będą się kompilować lub gorzej. Teraz musisz się spieszyć i zintegrować wszelkie zmiany, abyś mógł zatwierdzić inne pliki, zanim ktoś inny będzie musiał zaktualizować i uzyskać zepsuty zestaw zmian.
W SVN tak się nie stanie - SVN albo zatwierdzi wszystko, co zmieniłeś, albo zawiedzie cały zestaw zmian. Dlatego nigdy nie pozostawisz repozytorium w stanie uszkodzonym z powodu problemów z zatwierdzaniem.
Jest to wyjaśnione np. W Żegnaj CVS. Zostałem przemycony artykuł napisany przez Andy'ego Lestera :
Jeśli spróbuję zatwierdzić w Subversion, ale jeden z plików ma konflikt lub jest nieaktualny, żaden z plików się nie zatwierdza. W CVS masz w połowie zatwierdzony zestaw plików, które musisz naprawić PRAWO TERAZ.
Fakt, że CVS zmusza programistę do natychmiastowego naprawienia scalenia, jest tak nieproduktywny, jak to tylko możliwe. W porównaniu z tym znaczącą zaletą jest opcja opóźnienia / anulowania / ostrożnego scalenia zmian.
Inne zalety SVN w stosunku do CVS wyjaśnione w powyższym artykule to:
Lokalne wersje wszystkiego, co robisz
Jeśli chcesz cvs diff, musisz być w stanie połączyć się z repozytorium. Bez połączenia sieciowego, bez różnic. Subversion przechowuje lokalne nieskazitelne kopie tego, nad czym pracujesz, więc svn diff będzie działał dobrze. Chcesz zacząć od nowa? svn revert działa również bez połączenia.Symboliczne nazwy poprawek
HEAD to nazwa wierzchołka tułowia w CVS, ale zawsze chciałem móc powiedzieć „-r-1”, tak jakbym mógł cofnąć się w czasach PVCS. W CVS muszę zrobić cvs zalogować się do tego, co edytuję, a następnie odjąć jedno. To nie jest fajne. Z Subversion mogę powiedzieć svn diff -r PREV.Raportowanie stanu rzeczywistego
W CVS jedynym sposobem, aby sprawdzić, czy coś na serwerze jest nowsze, jest aktualizacja cvs i nadzieja, że cokolwiek się zepsuje, nie spowoduje żadnych konfliktów. Dzięki poleceniu svn status otrzymuję rzeczywisty status, dzięki czemu mogę sprawdzić, czy występują konflikty PRZED dokonaniem aktualizacji.Pomocna obsługa konfliktów scalania
W CVS, jeśli występują konflikty, w pliku pojawiają się znaczniki konfliktu. W Subversion otrzymujesz znaczniki konfliktu, PLUS kopię oryginalnego pliku przedkonfliktowego, PLUS wersję, która spadła z serwera, PLUS wersję, którą pierwotnie edytowałeś. Następnie musisz jawnie svn rozwiązać plik.txt, aby poinformować Subversion, że naprawiłeś problem. Koniec z przypadkowym ponownym włączaniem do CVS ze znacznikami konfliktu.
Oznacza to, że wszystkie zmiany we wszystkich plikach są zatwierdzane w jednej transakcji, więc albo wszystkie zakończą się powodzeniem, albo żadna.
Oznacza to, że rzadziej wprowadzane są częściowe zmiany w repozytorium, co powoduje niepowodzenia kompilacji. Nadal możesz sprawić, że ludzie zapominają o sprawdzeniu wszystkich odpowiednich plików, ale jest to raczej problem procesowy niż problem z systemem kontroli wersji.