(Jest to w dużej mierze oparte na A Git Horror Story: Integrity Repository With Signed Commits - bardzo dobra lektura i więcej informacji niż mogłem udzielić odpowiedzi).
Istnieje wiele sposobów na skompromitowanie repozytorium git (nie jest to usterka bezpieczeństwa, tylko fakt życia - z tego powodu nie należy unikać używania git). Na przykład ktoś mógł przepchnąć Twoje repozytorium podając się za Ciebie. Lub, jeśli o to chodzi, ktoś mógł przepchnąć się do czyjegoś repozytorium, podając się za ciebie (ktoś mógłby naciskać na swoje własne repozytorium, podając się za ciebie). To tylko część życia w DVCS.
Jako przykład:
$ git config --global user.name 'Madara Uchiha'
$ git config --global user.email muchiha@example.com
Tam zmieniłem konfigurację gita, żeby udawać, że jestem tobą. A teraz mogę oddać i pozwolić tym zatwierdzeniom jakoś wkroczyć do kompilacji produkcyjnej, i wygląda na to, że to zrobiłeś.
Dzięki podpisywaniu zatwierdzeń (i znaczników) można udowodnić, że niektóre zatwierdzenia i znaczniki były od ciebie (a rzeczy, które nie są podpisane, nie powinny były zostać wprowadzone do wersji produkcyjnej). To naprawdę klucz do tego wszystkiego - podpisując zobowiązania, które powiedziałeś, że to twoja praca.
Aspekt „twojej pracy” jest szczególnie ważny w jądrze Linuksa (a tym samym git), który czasami trafia w procesy o prawa autorskie. Podpisując zobowiązania, mówisz, że masz prawo do oprogramowania - śledzi ono pochodzenie. Możliwe, że nie masz dostępu do źródła, które jest przedmiotem roszczenia z tytułu praw autorskich, a roszczenie jest bezpodstawne. Być może firma zapomniała, że pracujesz dla nich kilka lat temu i pod ich kierownictwem dodała materiał do jądra, czy cokolwiek innego.
Trwa debata, czy każde zatwierdzenie powinno być podpisane. Od podpisania GPG dla git commit? (jeszcze w '09) Linus napisał:
Podpisywanie każdego zatwierdzenia jest całkowicie głupie. Oznacza to po prostu, że zautomatyzujesz go i sprawisz, że podpis będzie mniej wart. To również nie wnosi żadnej realnej wartości, ponieważ sposób, w jaki łańcuch git DAG w pracy SHA1, potrzebujesz tylko jednego podpisu, aby wszystkie zatwierdzenia dostępne z tego były skutecznie pokryte przez ten. Więc podpisywanie każdego zatwierdzenia po prostu mija się z celem.
Tam też można przeczytać o wiele więcej na temat myśli na temat logowania się w git.
To powiedziawszy, i tak trafiło do gita.
Wydaje się, że istnieje większość zgodności co do tego, że podpisywanie zatwierdzeń jest niepotrzebne, ale znaczniki podpisywania są bardzo dobre. Ten post na blogu umieszczony na górze sugeruje, że i tak należy wszystko podpisać. Jak powiedziałem, trwa debata na temat tego, czy każde zatwierdzenie jest konieczne, czy nie.
Klucz do debaty „podpisuj każde zatwierdzenie” prawdopodobnie wiąże się z używanym przepływem pracy. Większość ludzi dokonuje wielu zatwierdzeń w lokalnym repozytorium, a następnie wypycha ten zestaw. Powinno wystarczyć otagowanie końcowej kolekcji (przy założeniu, że upewnisz się, że wszystkie zmiany są prawidłowe). Jeśli pracujesz w środowisku, w którym porusza się wiele pojedynczych zatwierdzeń, rozróżnienie między tagiem a zatwierdzeniem staje się mniej… wyraźne - a zatwierdzanie podpisów może stać się bardziej przydatne.