개발관련/Git

[오류] gpg failed to sign the data fatal: failed to write commit object[Git 2.10.0]

Rateye 2021. 9. 30. 10:47
728x90
반응형
질문 : gpg가 데이터에 서명하지 못했습니다. 커밋 개체를 쓰지 못했습니다. [Git 2.10.0]

Git 2.10 릴리스 노트 의 예쁜 속성에 대한 몇 가지 기사를 따랐습니다. git을 2.10.0으로 업그레이드하고 다음과 같이 .gitconfig

[filter "lfs"]
    clean = git-lfs clean %f
    smudge = git-lfs smudge %f
    required = true
[user]
    name = xyz
    email = abc.def@gmail.com
    signingkey = AAAAAAA
[core]
    excludesfile = /Users/xyz/.gitignore_global
    editor = 'subl' --wait
[difftool "sourcetree"]
    cmd = opendiff \"$LOCAL\" \"$REMOTE\"
    path = 
[mergetool "sourcetree"]
    cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
    trustExitCode = true
[alias]
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
[color "diff"]
    old = red strike
    new = green italic

하지만 이제는 다음을 사용하여 커밋에 서명하려고합니다.

git commit -a -S -m "message"

다음 오류가 표시됩니다.

비밀 키를 잠금 해제하려면 암호가 필요합니다.

사용자 : "XYZ (디지털 서명 됨)"

2048 비트 RSA 키, ID AAAAAAAA, 2016-07-01 생성

오류 : gpg가 데이터에 서명하지 못했습니다. 치명적 : 커밋 개체를 쓰지 못했습니다.

 

참고 git commit -a -m "message" 사용하여 변경 사항을 커밋 할 수 있습니다.

이를 극복 할 수있는 방법이 있습니까? 또는 git 업그레이드와 함께하기 위해 gpg 구성에 필요한 변경 사항이 있습니까?


업데이트 1

또한 추가적인 유용성을 추구 하며 GPG 키를 사용하여 Git에서 커밋을 "자동 서명"하는 방법이 있습니까? . 이미 사용하여 키를 구성했습니다.

git config --global user.signingkey ED5CDE14(with my key) 
git config --global commit.gpgsign true

어쨌든 분명히 같은 오류가 발생합니다.

답변

OSX에서이 문제가 발생했습니다.

원본 답변:

gpg 업데이트 (brew)가 gpg 위치로 gpg1 변경된 것 같습니다. git이 gpg를 조회하는 바이너리를 변경할 수 있습니다.

git config --global gpg.program gpg1

gpg1이없는 경우 : brew install gpg1 .

 

수정 답변:

gpg1이 deprecated / "부드럽게 사용되지 않는 것 같습니다."이므로 실제로 gpg2로 업데이트해야합니다. 안타깝게도 여기에는 몇 단계 더 / 시간이 필요합니다.

brew upgrade gnupg  # This has a make step which takes a while
brew link --overwrite gnupg
brew install pinentry-mac
echo "pinentry-program /usr/local/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
killall gpg-agent

첫 번째 부분은 gpg2를 설치하고 후자는 이를 사용하는 데 필요한 해킹 입니다. 문제 해결을 위해이 답변을 참조하십시오 (그것이 brew가 아닌 Linux에 관한 것이지만), 좋은 테스트를 제안합니다.

echo "test" | gpg --clearsign  # on linux it's gpg2 but brew stays as gpg

이 테스트가 성공하면 (오류 / 출력에 PGP 서명이 포함되지 않음) 최신 gpg 버전으로 성공적으로 업데이트 한 것입니다.

이제 git 서명을 다시 사용할 수 있습니다!
다음이 필요하다는 점은 주목할 가치가 있습니다.

git config --global gpg.program gpg  # perhaps you had this already? On linux maybe gpg2
git config --global commit.gpgsign true  # if you want to sign every commit

참고 : 서명 된 커밋을 실행 한 후 다음을 사용하여 서명되었는지 확인할 수 있습니다.

git log --show-signature -1

마지막 커밋에 대한 gpg 정보가 포함됩니다.

출처 : https://stackoverflow.com/questions/39494631/gpg-failed-to-sign-the-data-fatal-failed-to-write-commit-object-git-2-10-0
728x90
반응형