Zawsze zastanawiałem się, dlaczego git woli skróty niż numery wersji. Numery wersji są znacznie wyraźniejsze i łatwiejsze do odniesienia (moim zdaniem): Istnieje różnica między poleceniem komuś spojrzenia na wersję 1200 lub zatwierdzeniem 92ba93e! (Podam tylko jeden przykład).
Czy jest więc jakiś powód tego projektu?
version-control
git
Max Beikirch
źródło
źródło
Odpowiedzi:
Pojedynczy, monotonicznie rosnący numer wersji ma sens tylko w przypadku scentralizowanego systemu kontroli wersji, w którym wszystkie wersje trafiają do jednego miejsca, które może śledzić i przypisywać numery. Po wejściu do świata DVCS, w którym istnieje wiele kopii repozytorium, a zmiany są pobierane i przekazywane do nich w dowolnych przepływach pracy, koncepcja po prostu nie ma zastosowania. (Na przykład, nie ma jednego miejsca do przypisania numerów wersji - jeśli rozwidlę twoje repozytorium, a rok później zdecydujesz się wycofać moje zmiany, w jaki sposób system może zapewnić, że nasze numery wersji nie powodują konfliktu?)
źródło
Person 1: "Hey, <P2>, what was revision 12345 for?" P2: "Revision 12345 was commited by <P3>." P3: "I don't have a revision 12345..."
- Jeśli dobrze pamiętam, Mercurial ma podobny problem. Z drugiej strony, gdyby korzystali z git, wszyscy mieliby identyczne referencje dla każdego zatwierdzenia.P1: "Do you have revision with the GUID gdlmsnblngoijlafd-35345-fg?"
... Bazaar nadal ma identyfikatory GUID ...git
. Zapewniają również numer lokalny tylko dla ułatwienia pisania.Potrzebujesz skrótów w systemie rozproszonym. Powiedzmy, że ty i kolega pracujecie nad tym samym repozytorium i oboje dokonacie zmiany lokalnie, a następnie wprowadzicie ją. Kto może być numerem wersji 1200, a kto numerem wersji 1201, skoro żadna ze stron nie ma o sobie wiedzy? Jedynym realistycznym rozwiązaniem technicznym jest utworzenie skrótu zmian za pomocą znanej metody i połączenie na tej podstawie różnych elementów.
Co ciekawe, HG obsługuje numery wersji, ale są one jawnie dostępne tylko lokalnie - twoje repozytorium ma jeden zestaw, repo twojego współpracownika będzie miało inny zestaw w zależności od tego, w jaki sposób pchały i wyciągały. Sprawia to, że korzystanie z wiersza poleceń jest nieco bardziej przyjazne niż Git.
źródło
Integralność danych.
Z szacunkiem nie zgadzam się z obecnymi odpowiedziami. Skróty nie są konieczne dla DVCS, patrz sposób bazarowy . Możesz zrobić to samo z dowolnym innym globalnie unikalnym identyfikatorem. Skróty są miarą gwarantującą integralność danych: reprezentują zestawienie informacji zawartych w obiekcie (zatwierdzenie, drzewa, ...), do których odwołuje się skrót. Zmiana zawartości bez zmiany skrótu (tj. Atak przedobrazowy lub atak kolizyjny ) uważa się za trudny, choć nie niemożliwy. (Jeśli naprawdę się tym interesujesz, spójrz na artykuł Marca Stevensa z 2011 roku ).
Odwołanie się do obiektów przez ich skrót SHA pozwala więc sprawdzić, czy zawartość została zmieniona. A ponieważ są (prawie) gwarantowane, że są unikalne, mogą być również używane jako identyfikatory wersji - tak wygodnie.
Więcej informacji znajduje się w rozdziale 9 książki Git.
źródło
Słowami laika:
źródło
W kategoriach matematycznych:
źródło
Hash nie jest unikalnym rozwiązaniem dla rozproszonego VCS. Ale w przypadku systemu rozproszonego można rejestrować tylko częściowe uporządkowanie zdarzeń. (W przypadku VCS zdarzenie może być zatwierdzeniem.) Dlatego utrzymanie monotonicznie rosnącego numeru wersji jest niemożliwe. Zwykle przyjmujemy coś w rodzaju zegara wektorowego (lub znacznika czasu wektorowego), aby zarejestrować taką częściowo uporządkowaną relację. To jest rozwiązanie stosowane w Bazaar .
Ale dlaczego Git nie używa zegara wektorowego, ale hash? Myślę, że główną przyczyną jest wybranie . Kiedy wykonujemy cherry-pick w repozytorium, częściowe porządkowanie zatwierdzeń się zmienia. Zegary wektorowe niektórych zatwierdzeń muszą zostać ponownie przypisane, aby reprezentowały nowe częściowe uporządkowanie. Jednak takie przeniesienie w systemie rozproszonym spowodowałoby niespójne zegary wektorowe. To jest prawdziwy problem, z którym radzą sobie skróty.
źródło