ký git cam kết không thành công: khóa bí mật không khả dụng


84

Tôi gặp lỗi này khi cố gắng commit bằng Git.

gpg: skipped "name <name@mail.com>": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object

Tôi đã tạo một khóa mới như bên dưới nhưng nó vẫn báo lỗi tương tự

gpg --list-keys
~/.gnupg/pubring.gpg
--------------------------------
pub   2048R/35F5FFB2 2016-04-23
uid                  name (New key) <name@mail.com>
sub   2048R/112A8C2D 2016-04-23

Khóa bí mật giống như trên

Tôi đã tìm thấy điều này Tạo khóa GPG để gắn thẻ git và đã làm theo các bước nhưng nó vẫn không hoạt động, bạn có ý kiến ​​gì không?


3
Đối với người dùng Windows, có nhiều khả năng gặp phải lỗi này hơn vì Git trên Windows không sử dụng đúng gpg. Không tìm thấy mã nhị phân chính xác trong PATH, git sử dụng gpg được đóng gói nội bộ bên trong MSYS được rút gọn của nó, mà không biết khóa của bạn ở đâu. Đặt các biến gpg.program hoặc G (NU) PGHOME sẽ giải quyết được vấn đề đó, như được chỉ định trong một số câu trả lời bên dưới.
Abel Cheung

Câu trả lời:


78

Bạn cần định cấu hình khóa bí mật trước khi sử dụng.

git config user.signingkey 35F5FFB2

Hoặc khai báo nó trên toàn cầu nếu bạn muốn sử dụng cùng một khóa cho mọi kho lưu trữ.

git config --global user.signingkey 35F5FFB2

Nguồn: Git Tools - Signing Your Work


Cảm ơn bạn rất nhiều Leonardo! Nó hoạt động !! Xin lỗi nếu câu hỏi là ngớ ngẩn, tôi không biết làm thế nào để giải quyết nó.
Emilio Menéndez

Thông minh! Việc chỉ định khóa ký của người dùng cũng sẽ khiến bạn có nhiều địa chỉ email trên một khóa và có sự không khớp giữa email git và địa chỉ đầu tiên trên khóa.
dùng2943160

1
Lưu trữ .gitconfig với khóa bí mật trong kho công khai có an toàn không?
melihovv

1
cho bản ghi như @melihovv đã hỏi về: - Khóa bí mật phải nằm trên khóa GPG của bạn. Chỉ có ID băm của khóa đó được lưu trữ trong cấu hình.
BRPocock

2
Tôi đã phải làm điều này cùng với git config --global gpg.program gpg2.
Splaktar

108

Điều này làm việc cho tôi trên Windows 10 (Lưu ý rằng tôi sử dụng đường dẫn tuyệt đối đến gpg.exe):

git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"

Đây là lỗi tôi mắc phải trước khi sửa:

gpg: skipped "3E81C*******": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object

2
Gặp lỗi này secret key not availablevới VS Code và gpg.exevị trí cài đặt đã giải quyết nó.
Dawid

2
Cái này cũng có tác dụng với tôi. Đặc biệt là sau khi làm theo các bước cấu hình từ chính github .
Bas G

1
Mỗi khi cài đặt bản dựng Windows Insider của tôi, tùy chọn này sẽ đặt lại. Cảm ơn vì điều này :)
VRG

Điều này cũng hiệu quả với tôi sau khi thêm đường dẫn tuyệt đối của gpg. Cảm ơn rất nhiều.
Adarsh ​​Srivastava

64

Những gì làm việc cho tôi đã được thêm

git config --global gpg.program "C:/Program Files (x86)/GNU/GnuPG/gpg2.exe"

Nếu bạn muốn tìm đường dẫn đầy đủ của gpg2.exe:

where gpg2.exe

3
Tùy thuộc vào phiên bản GnuPG đã cài đặt, bạn cần thực hiện việc này gpg.exethay vì gpg2.exe.
Mark Rotteveel

14

Tôi muốn hoàn thành tất cả các câu trả lời này, vì tôi có nhiều vấn đề với điều này.

Những ví dụ này sử dụng --globalcờ, nhưng bạn có thể xóa nó nếu bạn muốn cục bộ những thứ này.

Định cấu hình khóa bí mật trong git

git config --global user.signingkey 35F5FFB2

Định cấu hình chương trình gpg phù thủy bạn sử dụng trong git (tùy chọn)

Một số hệ thống (Ubuntu cho dụ) có thể có gpggpg2cùng một lúc. Bạn cần chỉ định bạn sẽ sử dụnggpg2

git config --global gpg.program gpg2

Xuất GPG_TTY (tùy chọn)

Có thể xảy ra nếu bạn sử dụng các lệnh này trong môi trường ssh mà bạn gặp lỗi sau: Inappropriate ioctl for devicehoặc gpg: échec de la signature : Ioctl() inapproprié pour un périphérique. Điều này có thể được khắc phục thông qua:

export GPG_TTY=$(tty)

Tự động bật GPG hát (tùy chọn)

git config --global commit.gpgsign true

Làm thế nào để vô hiệu hóa nó nếu bạn không muốn sử dụng nó nữa?
Madona Syombua

1
Bạn có thể làm thêm --unsetcờ trên những git configlệnh để vô hiệu hóa nó
alphayax

Tôi thực sự đã sử dụng cấu hình git này --global commit.gpgsign true nhưng nói sai.
Madona Syombua

7

Tôi đã gặp một tình huống tương tự xảy ra với tôi trên máy tính Windows 10.

$ git commit -m "Improve logging, imports and show time executed"
gpg: signing failed: Operation cancelled
gpg: signing failed: Operation cancelled
error: gpg failed to sign the data
fatal: failed to write commit object

Các lệnh "C:\Program Files (x86)\GnuPG\bin\gpg.exe" --list-secret-keys --keyid-format LONGgpg --list-secret-keys --keyid-format LONGnơi cung cấp cho tôi các kết quả hoàn chỉnh khác nhau!

$ where gpg
C:\Program Files\Git\usr\bin\gpg.exe
C:\Program Files (x86)\GnuPG\bin\gpg.exe

Lý do chính là liên quan đến các câu trả lời trước đó nhưng theo một nghĩa khác:

  • Tôi đang tạo các khóa gpg bằng phiên bản git (đường dẫn được định cấu hình) của GPG
  • Git đã được định cấu hình để sử dụng phiên bản gpg đã tải xuống cho cam kết.
  • Có vẻ như việc triển khai GPG sử dụng cơ sở dữ liệu và lưu trữ chứng chỉ của riêng họ.

Tôi hy vọng điều này có thể giúp bất kỳ ai tình cờ gặp thông báo này và các câu trả lời trước đó không giải quyết được vấn đề.


Đã phải thêm khóa bí mật cho kleopatra từ phần xuất cli, vì cộng đồng studio trực quan dường như sử dụng khóa đó theo mặc định để ký kết, trong đó git cli đã sử dụng một danh sách / cách triển khai khác và do đó vẫn hoạt động mà không có kleopatra.
Nithish

5

Bạn phải đặt biến GNUPGHOME. Nếu không có nó, GnuPG không thể tìm thấy khóa của bạn.

# On unix add it to your path

# On windows it will usually be under: 
<drive>:\Users\<username>\AppData\Roaming\gnupg

Trên Unix, nó chỉ cần thêm nó vào đường dẫn.
Trên Windows, bạn phải mở bảng điều khiển và đặt nó là

System Variable
  Name: GNUPGHOME
  Path: <drive>:\Users\<username>\AppData\Roaming\gnupg

1
Đối với tôi thì không GNUPGHOME. Với GPGHOMEnó hoạt động cho tôi
Sysix

1

Tôi đã gặp vấn đề tương tự ở đó là tên git cửa hàng email trong .gitconfig khác với những cái mà khóa gpg được cung cấp. Tôi đã thay đổi chúng để phù hợp và nó bắt đầu hoạt động.


0

Sử dụng "C:\Program Files\Git\usr\bin\gpg.exe"là giải pháp cho tôi.
Đã phải gỡ cài đặt kleopatra. Với nó, nó đã không hoạt động.

Vì vậy, tổng kết lại;

  • Không cần kleopatra, hãy sử dụng GIT mặc định thay thế.

  • git config --global user.signingkey Y0URK3Y
    git config --global commit.gpgsign true
    git config --global gpg.program "C:\Program Files\Git\usr\bin\gpg.exe"
    

-4

Có thể bạn cần sao chép kho lưu trữ của riêng mình nơi bạn có quyền. Tôi gặp sự cố này khi sao chép kho lưu trữ của một người khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.