Git od wersji 2.0.0 potrafi podpisywać commit-y. Github potrafi pokazywac podpisane commit-y. Całkiem przyjemna rzecz, szczególnie jeśli pracujemy nad otwartym kodem do którego kontrybuuje wiele osób. W jaki sposób zatem ustawić wszystko aby mieć takie ładne zielone „jajko” z napisem Verified?
Zacznijmy od konfiguracji samego GitHub-a:
Zakładam, że już używasz SSH choćby dla wygody więc pojęcia klucza prywatnego i publicznego są Ci znane a twój Git jest odpowiednio skonfigurowany. Zatem przejdźmy do samej konfiguracji:
W ustawieniach swojego profilu przechodzimy do sekcji SSH and GPG keys, dodajemy nowy klucz SSH i oznaczamy go jako Signing Key
Po dodaniu klucza powinniśmy mieć coś takiego:
W sekcji Signing keys mamy nowy lub stary klucz. Możemy używać tego samego klucza co do ssh, możemy używać innego. Wszystko zależy do czego to konfigurujemy lub od Twojego osobistego poziomu paranoii 🙂
Mając skonfigurowanego GitHub-a pozostaje skonfigurować lokalnego gita. Interesować nas będą następujące ustawienia:
git config --global user.signingkey ~/.ssh/your_id_rsa.pub
git config --global gpg.format ssh
git config --global commit.gpgsign true
Pierwszy parametr user.signingkey to ścieżka do klucza publicznego twojego identity. Jeśli korzystasz z jednego to zapewne id_rsa.pub (jeśli wielu to już wiesz co tam wpisać)
Drugi parametr gpg.format mówi git-owi z jakiego sposobu chcemy korzystać. Na początek (i przy średnim poziomie paranoii) wystarczy ssh.
Trzeci parametr commit.gpgsign mówi, że każdy commit ma być podpisywany automatycznie. Jeśli nie włączymy tej opcji, wówczas commity domyślnie nie będą podpisane. Mamy jednak możliwość podpisywania wybranych commitów dodając flagę -S
git commit -S -m "some commit message"
Ponieważ chcę automatycznie podpisywać wszystkie commity to u siebie ustawiłem commit.gpgsign na true.
Powyższe komendy ustawiają globalną konfigurację (–global) ale nic nie stoi na przeszkodzie aby nie korzystać z flagi –global i ustawiać to tylko dla wybranych repozytoriów.