Czy istnieje prosty sposób, aby Git zawsze podpisywał każdy zatwierdzony lub znacznik, który został utworzony?
Próbowałem z czymś takim jak:
alias commit = commit -S
Ale to nie pomogło.
Nie chcę instalować innego programu, aby tak się stało. Czy jest to wykonalne z łatwością?
Tylko pytanie poboczne, być może zatwierdzenia nie powinny być podpisywane, tylko tagi, których nigdy nie tworzę, ponieważ przesyłam pojedyncze zatwierdzenia dla projektu takiego jak Homebrew itp.
git
public-key-encryption
gnupg
MindTooth
źródło
źródło
git filter-branch -f --commit-filter 'git commit-tree -S "$@"' HEAD@{u}..HEAD
(Nie mam na myśli, że powinieneś tego użyć).Odpowiedzi:
Uwaga: jeśli nie chcesz
-S
cały czas dodawać, aby upewnić się, że twoje zatwierdzenia są podpisane, jest propozycja (oddziałpu
na razie, grudzień 2013, więc nie ma gwarancji, że trafi do wydania git), aby dodać config, który zajmie się tą opcją dla Ciebie.Aktualizacja maja 2014: jest w Git 2.0 (po ponownym wysłaniu w tej serii poprawek )
Zobacz zatwierdzenie 2af2ef3 przez Nicolasa Vigiera (boklm) :
Dodaj
commit.gpgsign
opcję podpisywania wszystkich zatwierdzeńTa konfiguracja jest zwykle ustawiana dla każdego repozytorium (nie musisz podpisywać prywatnych eksperymentalnych repozytoriów lokalnych):
Połączysz to z
user.signingKey
ustawieniem globalnym (unikalny klucz używany do wszystkich repozytoriów, w których chcesz podpisać zatwierdzenie)user.signingKey
został wprowadzony w git 1.5.0 (styczeń 2007) z zatwierdzeniem d67778e :To jest egzekwowane z popełnienia aba9119 (git 1.5.3.2), aby złapać sprawę gdzie Jeśli użytkownik błędnie skonfigurowany
user.signingKey
w ich.git/config
lub po prostu nie ma żadnych tajnych kluczy na ich kluczy.Uwagi:
signingKey
, niesigningkey
, choćgit config
klawisze są wrażliwe na wielkość liter. Że będzie miało znaczenia, jeśli nie wyłączniegit config --get-regexp
, która jest wielkość liter, w przeciwnym razie jest to tylko konwencja czytelność;git push --signed
nie wziął pod uwagęuser.signingKey
wartości konfiguracji;user.signingKey
do wymuszenia podpisywania tagów z adnotacjami , a także commits : commit 61c2fe0 .źródło
Zastąp 9E08524833CB3038FDE385C54C0AFCCFED5CDE14 swoim identyfikatorem klucza. Pamiętaj: użycie krótkiego identyfikatora nigdy nie jest dobrym pomysłem .
AKTUALIZACJA: Zgodnie z nowym edycją git wszystkie klucze konfiguracji powinny znajdować się w camelCase.
źródło
~/.gnupg/gpg-agent.conf
i dodawaćpinentry-program /usr/bin/pinentry-gtk-2
(postępując zgodnie z tym przewodnikiem wiki.archlinux.org/ index.php / GnuPG # pinentry )Edit: Począwszy od wersji 1.7.9 Git, to jest możliwe do podpisania zobowiązuje Git (
git commit -S
). Lekko aktualizuję odpowiedź, aby to odzwierciedlić.Tytuł pytania to:
Krótka odpowiedź: tak, ale nie rób tego.
Adresowanie literówki w pytaniu:
git commit -s
nie podpisuje zatwierdzenia. Zamiast tego zeman git-commit
strony:Daje to wynik dziennika podobny do następującego:
Zwróć uwagę na bit „Signed-off-by: ...”; wygenerowany przez
-s
flagę na stroniegit-commit
.Cytując e-maila z ogłoszeniem o wydaniu :
Więc tak, możesz podpisywać zatwierdzenia. Jednak osobiście wzywam do ostrożności z tą opcją; automatyczne podpisywanie zatwierdzeń jest bezcelowe, patrz poniżej:
To jest poprawne. Zobowiązania nie są podpisane; tagi są. Powód tego można znaleźć w tym przesłaniu Linusa Torvaldsa , którego ostatni akapit mówi:
Zachęcam do przeglądania połączonej wiadomości, która wyjaśnia, dlaczego automatyczne podpisywanie zatwierdzeń nie jest dobrym pomysłem w znacznie lepszy sposób niż ja.
Jednakże , jeśli chcesz automatycznie podpisać znacznik , będzie można to zrobić poprzez owinięcie
git-tag -[s|u]
w alias; jeśli masz zamiar to zrobić, prawdopodobnie chcesz ustawić swój identyfikator klucza~/.gitconfig
lub.git/config
plik specyficzny dla projektu . Więcej informacji na temat tego procesu można znaleźć w książce społeczności git . Podpisywanie tagów jest nieskończenie bardziej przydatne niż podpisywanie każdego dokonanego zatwierdzenia.źródło
git blame
do kogo chce.Aby automatyczne podpisywanie działało przed wersją 2.0, musisz dodać alias git do zatwierdzenia.
źródło
Musisz wyjaśnić, że jeśli podpiszesz zatwierdzenie lub tag, nie oznacza to, że zatwierdzasz całą historię. W przypadku zatwierdzeń podpisujesz tylko pod ręką zmianę, aw przypadku tagu, cóż ... musisz zdefiniować, co masz na myśli. Być może wyciągnąłeś zmianę, która twierdzi, że jest od ciebie, ale nie była (ponieważ ktoś inny pchnął ją do twojego pilota). Lub jest to zmiana, w której nie chcesz być, ale właśnie podpisałeś tag.
W typowych projektach OSS może to być mniej powszechne, ale w scenariuszu korporacyjnym, w którym od czasu do czasu dotykasz kodu i nie czytasz całej historii, może to zostać niezauważone.
Podpisywanie zobowiązań jest problemem, jeśli zostaną one ponownie ustawione lub wybrane przez innych rodziców. Byłoby dobrze, gdyby zmodyfikowane zatwierdzenie mogło wskazywać na „oryginalne” zatwierdzenie, które faktycznie weryfikuje.
źródło
commit.gpgsign
true zgodnie z sugestią @VonC