Você pode assinar GPG com commits antigos?

60

O Git agora tem a capacidade de assinar commits com git commit -S , o que é ótimo, mas às vezes esqueço o sinalizador para commit , e às vezes envio remendos a mim mesmo que aplico com am , e esse comando não t tem uma bandeira para assinar.

Existe uma maneira de adicionar uma assinatura a um commit já registrado?

    
por Magnus 05.03.2012 / 18:17

6 respostas

43

  1. Entre no modo de rebase interativa.
  2. Adicione a seguinte linha após cada commit que você deseja assinar

    exec git commit --amend --no-edit -S

Isto irá executar este comando depois de escolher cada commit.

UPDATE:

A maneira mais fácil de fazer isso é:

git rebase --exec 'git commit --amend --no-edit -n -S' -i development

Isso renova tudo até o desenvolvimento (ou qualquer hash) e você não precisa copiar e colar após cada commit.

    
por 13.09.2016 / 16:32
26

Assinar um commit muda seu conteúdo, então commits mais recentes, dependendo dele, mudarão seu hash.

Se você quiser apenas assinar a confirmação mais recente, git commit -S --amend funcionará.

    
por 24.05.2012 / 19:39
10

Eu uso git rebase -i --root (consulte Histórico de reescrita ) e altero pick to edit .

Então eu uso git commit -S --amend --no-edit && git rebase --continue (no Windows) para cada commit.

This is manually sign for each commits. I hope we will found better solution.

    
por 09.04.2016 / 09:17
1

Se você quiser filtrar somente confirmações específicas e assinar somente elas, poderá usar filter-branch :

git filter-branch --commit-filter 'if [ "$GIT_COMMITTER_EMAIL" = "[email protected]" ];
  then git commit-tree -S "$@";
  else git commit-tree "$@";
  fi' HEAD

Isso é útil se, por algum motivo, você quiser assinar apenas seus próprios commits.

    
por 14.04.2018 / 16:13
1

Eu também deparei com o mesmo problema e aqui está a minha solução:

git rebase -i --root --exec 'git commit --amend --no-edit --no-verify -S'

isto irá assinar todos os meus commits do primeiro commit inicial e também bypass commit hook que eu configurei usando husky . Não é necessário alterar pick para edit .

    
por 12.08.2018 / 11:35
0

Se você precisar assinar todos os commits de GPG desde um commit específico no branch atual, você pode usar o seguinte:

git filter-branch --commit-filter 'git commit-tree -S "$@";' <COMMIT>..HEAD

Em que <COMMIT> é o código de confirmação (por exemplo, abc123e5 ).

Isso tem o benefício adicional de não perturbar os metadados de confirmação (incluindo a data de confirmação).

Se você também quiser deixar de receber uma solicitação para sua senha GPG em cada confirmação, veja também esta resposta: link

NOTA: A mudança de gpg para gpg2 para a assinatura do GIT exigirá que você importe novamente sua chave privada no GPG 2.

    
por 20.10.2018 / 07:35

Tags