問題我如何註冊混帳提交使用類似的IntelliJ Windows上的IDE?如何在IntelliJ IDE等IDE中籤名提交?
如果你有興趣,讀什麼我想在這裏:
我跟着主要Github's guide。我確保在更改配置文件後不要忘記重新啓動bash/IntelliJ。
- Generate a new GPG key pair
- Add the GPG key to my GitHub account
- Associate a verified (by GitHub) email with my GPG key,我在我的
.gitconfig
確信電子郵件是一樣的。 - Tell Git about my GPG key
- Sign a commit with GPG並確認它是Github上的Verfied。
- 從同一頁面,我設置提交以默認簽名
git config --global commit.gpgsign true
(我使用git 2.12)。我做了一個新的提交併驗證它與git verify-commit HEAD
當我嘗試的IntelliJ提交簽字,我得到
gpg: cannot open tty 'no tty'
所以我發現IntelliJ fails to commit changes when attempting to sign commit (GPG)並添加no-tty
我C:\Users\username\.gnupg\gpg.conf
文件並重新啓動。然後我得到錯誤
gpg: Sorry, no terminal at all requested - can't get input
這似乎是合理的,因爲我只是添加了與終端有關的選項。像gpg: Sorry, no terminal at all requested - can't get input說解決方案是刪除no-tty
,我希望不適用於我的情況。在第一個問題,其他的答案建議增加
use-agent
以及在gpg.conf
文件,這會導致更多的錯誤gpg: gpg-agent is not available in this session
。等等,也許我需要設置gpg-agent。適用於Windows,我能找到的最好的指南是Archlinux wiki(是的,右)。它指定要添加到
C:/Users/username/.gnupg/gpg-agent.conf
住的時候,所以我創建這個文件,並添加default-cache-ttl 34560000
每 https://superuser.com/questions/624343/keep-gnupg-credentials-cached-for-entire-user-sessionmax-cache-ttl 34560000
如現在讓我們真正開始這個GPG代理,https://superuser.com/questions/1153101/why-does-git-complain-that-no-gpg-agent-is-running讓我檢查確實gpg-agent --version
是遠遠更新gpg --version
,所以我想有gpg2,所以我可以運行git config --global gpg.program gpg2
。但我沒有在命令行上提供gpg2。我安裝Gpg4win(二進制版本,在底部),甚至GNUPG 2分開,但沒有給我gpg2在命令行中,我注意到我在我的程序文件(x86),我想我應該有文件夾GNU。用
where gpg
我發現它至少沒有指向我剛下載的gpg,因爲那個顯示第二個。所以我指出正確的一個與git config --global gpg.program 'C:\Program Files (x86)\GnuPG\bin\gpg.exe'
現在我有錯誤
gpg: skipped "keyid": secret key not available
。 gpg: skipped "N": secret key not available中的解決方案就是我剛纔所做的,所以這沒有幫助。然後我意識到我把所有的東西都放在另一個gpg上,而不是這個。我做了alias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'"
,檢查了gpg --version
並且再次做了整件事。其實我把別名行放在我的.bash_profile
中,所以我不需要每次都運行它。當我嘗試
gpg --gen-key
立即掛起。不知道爲什麼,我不認爲這個問題是不夠的,因爲舊的gpg運行良好,但是新版本可能需要更多的熵。無論如何,我找不到在互聯網上遇到同樣問題的任何Windows用戶。它的工作原理!當我在IntelliJ中提交時,它只需要鬆一次就請求我的密碼。但現在我不能從Git Bash提交,因爲
no secret key
錯誤是有道理的,因爲正如我所說的gpg --list-keys
是空的:沒有密鑰與此gpg關聯。Intellij IDEA signing GIT commits with GPG是相關的,但唯一的答案是MAC和似乎並不適用於Windows。它確實引導我:
me.m01.eu提示添加名爲
GNUPGHOME
的新環境變量,它指向C:\Users\username\.gnupg
。該目錄存在,但正如從git commit signing failed: secret key not available回答中提到的,我認爲我的新gpg使用C:\Users\username\AppData\Roaming\gnupg
,所以我補充說。我與printenv GNUPGHOME
檢查,我正確添加它(我不得不重新啓動)。雖然沒有改變任何東西。由於我的鑰匙是我認爲在
C:\Users\username\.gnupg
我試圖指出環境變量到那裏,但它沒有幫助,gpg --list-keys
仍然是空的。所以我不得不尋找另一種方式指出我的鑰匙在哪裏。gpg --list-keys --homedir='C:/Users/s156757/.gnupg'
便從正確的鑰匙,所以我決定將homedir C:\Users\s156757\.gnupg
我C:\Users\username\AppData\Roaming\gnupg\gpg.conf
文件,我不得不創建。由於this bug。我確認gpg --list-keys
退還了我的鑰匙。仍然是相同的錯誤,加入no-tty
和use-agent
到這個conf文件沒有幫助。
我現在可以從內部的IntelliJ承諾,但不再使用Git猛砸,導致
skipped "keyid": No secret key
。
更多的想法
- 我沒從GPG導出密鑰與
gpg --export [ID] | gpg2 --import && gpg --export-secret-keys [ID] | gpg2 --import
- 我想Gpg4win到gpg2單獨也許可以這樣配置我每次都不需要輸入我的密碼。不幸的是,我找不到任何方法讓Gpg4win記住我的密碼。
- 後來我想,如果我沒有記錯的GPG 2.正確
gpg --list-secret-keys
再也沒回什麼,我後來才發現,這個命令是從gpg --list-keys
不同。
總之這是主要問題:gpg-agent允許密碼緩存,但gpg版本的git與gpg-agent版本不匹配,所以你必須先安裝正確的gpg 2。但是我沒有設法以這種方式來做這樣的安裝,我可以從Git Bash和IntelliJ提交。
啊我不知道'--batch'選項,非常感謝!正如在https://unix.stackexchange.com/questions/60213/gpg-asks-for-password-even-with-passphrase/60439中提到的,我必須將我的密碼輸入到它才能使用。所以我的shell腳本成爲'echo passphrase | gpg --passphrase-fd 0 --batch --no-tty --yes「$ @」'並在我的gitconfig中'C:\\ Users \\ s156757 \\ gpg-no-tty.sh'。我將在稍後爲將來的用戶寫一個完整的答案。 – PHPirate