Então, alguém examinou meu trabalho e me disse que eu deveria sempre assinar meus commits e tags criptograficamente. Quando perguntado por quê, ele não sabia me explicar e disse: "É apenas uma coisa boa a se fazer".
Tentando evitar um cenário óbvio de chimpanzé , por que eu deveria mesmo? Há realmente tantas vantagens distintas e sem desvantagens?
Quais são os motivos práticos que me levariam a assinar todos os commit e tags que faço?
git
cryptography
Madara Uchiha
fonte
fonte
Respostas:
(Isso se baseia amplamente em A Git Horror Story: Integridade do repositório com compromissos assinados - uma leitura muito boa e mais informações do que eu poderia colocar em uma resposta.)
Existem várias maneiras pelas quais um repositório git pode ser comprometido (isso não é uma falha de segurança, apenas um fato da vida - não se deve evitar o uso do git por causa disso). Por exemplo, alguém pode ter enviado para o seu repositório alegando ser você. Ou, nesse caso, alguém poderia ter enviado para o repositório de alguém que afirma ser você (alguém pode enviar para o próprio repositório que afirma ser você também). Isso é apenas parte da vida em um DVCS.
Apenas como exemplo:
Lá, mudei minha configuração do git para fingir que sou você. E agora eu posso me comprometer e deixar esses comprometimentos entrarem na construção da produção, e parece que você fez isso.
Com a assinatura dos commits (e tags), pode-se provar que determinados commits e tags foram de você (e coisas que não foram assinadas não deveriam ter entrado na construção da produção). Essa é realmente a chave de tudo: assinando confirmações, você disse que é seu trabalho.
O aspecto "seu trabalho" é particularmente importante no kernel do linux (e, portanto, no git) que é ocasionalmente atingido por ações de direitos autorais. Ao assinar confirmações, você diz que tem direito ao software - ele rastreia a origem. Pode ser que você não tenha acesso à fonte que está sendo reivindicada como direitos autorais e a reivindicação é infundada. Pode ser que a empresa tenha esquecido que você estava trabalhando para eles há alguns anos e, sob a direção deles, adicionou material ao kernel, ou qualquer outra coisa.
Há algum debate sobre se todo commit deve ser assinado. Da assinatura do GPG para o git commit? (em '09), Linus escreveu:
Muito mais sobre os pensamentos sobre o login no git também podem ser lidos lá.
Dito isto, ele chegou ao git de qualquer maneira.
Parece haver um consenso majoritário de que a assinatura de confirmações é desnecessária, mas a assinatura de tags é muito boa. O post no blog sugere que alguém assine tudo de qualquer maneira. Como eu disse, há um debate sobre se todo commit é necessário ou não.
A chave para o debate "assine todos os commit" provavelmente tem a ver com o fluxo de trabalho que você usa. A maioria das pessoas faz muitos commits em seus repositórios locais e depois pressiona esse conjunto. Deve ser suficiente marcar a coleção final (supondo que você tenha certeza de que todas as alterações estão corretas). Se você estiver trabalhando em um ambiente em que muitas confirmações únicas estão sendo movimentadas, a distinção entre uma marca e uma confirmação se torna menos ... distinta - e as confirmações de assinatura podem se tornar mais úteis.
fonte
commit.gpgsign = true
e não posso verificar nenhuma desvantagem. Embora possa ser bobo, não parece muito caro.