Pochodząc ze środowiska SVN, jedną z najtrudniejszych rzeczy, do których należy się przyzwyczaić podczas pracy z systemami DVCS, jest sposób, w jaki wszyscy postrzegają każdą niezaangażowaną zmianę jak tykającą bombę zegarową.
W Mercurial, jeśli próbujesz pobrać zmiany i masz jakieś niezatwierdzone zmiany w kopii roboczej, musisz przeskakiwać obręcze, aby po prostu scalić nadchodzące zmiany. Chcesz zmienić gałęzie? Zmusi cię to do odłożenia wszystkiego na półkę, a następnie będziesz musiał natychmiast odłożyć to wszystko na drugim końcu. (SVN nie ma problemów z żadnym z tych scenariuszy.)
Git jest mniej więcej taki sam. Współpracuję z innym programistą przy projekcie i właśnie próbowałem wybrać jeden z jego commits do mojego widelca. Odmówił mi pozwolenia, ponieważ wprowadziłem niezatwierdzone zmiany w mojej kopii roboczej, w zupełnie innych plikach niż te zmienione w jego zatwierdzeniu. Nie ma nawet opcji scalania; najwyraźniej najpierw muszę ukryć swoje zmiany!
Gdyby ktoś traktował coś całkowicie nieszkodliwego z tak wielką ostrożnością, nazwałbym to „fobią”, irracjonalnym strachem, który należy uznać za zaburzenie psychiczne. Ale Git i Mercurial zostały zaprojektowane przez dwa różne zespoły inteligentnych, racjonalnych programistów, więc muszę się zastanawiać, czy wiedzą coś, czego nie jestem świadomy.
Czy istnieje powód techniczny, który uzasadnia takie podejście do niezaangażowanych zmian? A jeśli tak, to dlaczego wydaje się, że problem występuje tylko w DVCSes?