2017-10-21 179 views
3

問題我如何註冊混帳提交使用類似的IntelliJ Windows上的IDE?如何在IntelliJ IDE等IDE中籤名提交?

如果你有興趣,讀什麼我想在這裏:

我跟着主要Github's guide。我確保在更改配置文件後不要忘記重新啓動bash/IntelliJ。

  1. Generate a new GPG key pair
  2. Add the GPG key to my GitHub account
  3. Associate a verified (by GitHub) email with my GPG key,我在我的.gitconfig確信電子郵件是一樣的。
  4. Tell Git about my GPG key
  5. Sign a commit with GPG並確認它是Github上的Verfied。
  6. 從同一頁面,我設置提交以默認簽名git config --global commit.gpgsign true(我使用git 2.12)。我做了一個新的提交併驗證它與git verify-commit HEAD
  7. 當我嘗試的IntelliJ提交簽字,我得到gpg: cannot open tty 'no tty'所以我發現IntelliJ fails to commit changes when attempting to sign commit (GPG)並添加no-ttyC:\Users\username\.gnupg\gpg.conf文件並重新啓動。

  8. 然後我得到錯誤gpg: Sorry, no terminal at all requested - can't get input這似乎是合理的,因爲我只是添加了與終端有關的選項。像gpg: Sorry, no terminal at all requested - can't get input說解決方案是刪除no-tty,我希望不適用於我的情況。

  9. 在第一個問題,其他的答案建議增加use-agent以及在gpg.conf文件,這會導致更多的錯誤gpg: gpg-agent is not available in this session。等等,也許我需要設置gpg-agent。

  10. 適用於Windows,我能找到的最好的指南是Archlinux wiki(是的,右)。它指定要添加到C:/Users/username/.gnupg/gpg-agent.conf住的時候,所以我創建這個文件,並添加default-cache-ttl 34560000https://superuser.com/questions/624343/keep-gnupg-credentials-cached-for-entire-user-session

  11. max-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

  12. 但我沒有在命令行上提供gpg2。我安裝Gpg4win(二進制版本,在底部),甚至GNUPG 2分開,但沒有給我gpg2在命令行中,我注意到我在我的程序文件(x86),我想我應該有文件夾GNU。用where gpg我發現它至少沒有指向我剛下載的gpg,因爲那個顯示第二個。所以我指出正確的一個與git config --global gpg.program 'C:\Program Files (x86)\GnuPG\bin\gpg.exe'

  13. 現在我有錯誤gpg: skipped "keyid": secret key not availablegpg: skipped "N": secret key not available中的解決方案就是我剛纔所做的,所以這沒有幫助。然後我意識到我把所有的東西都放在另一個gpg上,而不是這個。我做了alias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'",檢查了gpg --version並且再次做了整件事。其實我把別名行放在我的.bash_profile中,所以我不需要每次都運行它。

  14. 當我嘗試gpg --gen-key立即掛起。不知道爲什麼,我不認爲這個問題是不夠的,因爲舊的gpg運行良好,但是新版本可能需要更多的熵。無論如何,我找不到在互聯網上遇到同樣問題的任何Windows用戶。

  15. 它的工作原理!當我在IntelliJ中提交時,它只需要鬆一次就請求我的密碼。但現在我不能從Git Bash提交,因爲no secret key錯誤是有道理的,因爲正如我所說的gpg --list-keys是空的:沒有密鑰與此gpg關聯。

  16. Intellij IDEA signing GIT commits with GPG是相關的,但唯一的答案是MAC和似乎並不適用於Windows。它確實引導我:

  17. 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檢查,我正確添加它(我不得不重新啓動)。雖然沒有改變任何東西。

  18. 由於我的鑰匙是我認爲在C:\Users\username\.gnupg我試圖指出環境變量到那裏,但它沒有幫助,gpg --list-keys仍然是空的。所以我不得不尋找另一種方式指出我的鑰匙在哪裏。

  19. gpg --list-keys --homedir='C:/Users/s156757/.gnupg'便從正確的鑰匙,所以我決定將homedir C:\Users\s156757\.gnupgC:\Users\username\AppData\Roaming\gnupg\gpg.conf文件,我不得不創建。由於this bug。我確認gpg --list-keys退還了我的鑰匙。仍然是相同的錯誤,加入no-ttyuse-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提交。

    回答

    2

    IDEA不是終端,並不能在此刻手柄簽約。請參閱https://youtrack.jetbrains.com/issue/IDEA-127802

    有一種變通方法,雖然,檢查https://youtrack.jetbrains.com/issue/IDEA-127802#comment=27-1866498

    +0

    啊我不知道'--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

    1

    對於參考,這裏是我做使它工作的完整說明,或者說的步驟。如果您遇到問題,請檢查問題中的步驟,看看是否有同樣的問題。

    1. 前幾個步驟是從良Github's guideGenerate a new GPG key pair
    2. Add the GPG key to your GitHub account
    3. Associate a verified (by GitHub) email with your GPG key,並確保在您的.gitconfig的姓名和電子郵件是相同的。
    4. Tell Git about your GPG key
    5. Sign a commit with GPG並確認它是在Github上驗證,你應該看到一個小徽章,當你查看你的提交。
    6. 設置提交將被默認簽名爲git config --global commit.gpgsign true。做一個新的提交,並驗證它是否與git verify-commit HEAD簽署。

    7. 自帶的git的GPG版本太舊,所以安裝[Gpg4win] [8](二進制版本,在底部)應安裝GPG 2. where gpg你應該看到兩個路徑,其中可能的其次是你的新gpg,例如C:\Program Files (x86)\GnuPG\bin\gpg.exe。如果不是,請嘗試從下載頁面單獨安裝Gnupg 2。

    8. 我把alias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'"gpg命令指向我的新GPG在我C:\Users\username\.bash_profile,重新啓動的Git Bash和與gpg --version檢查,我現在用GPG 2.

    9. 添加名爲GNUPGHOME一個新的環境變量,指向C:\Users\username\.gnupg。重新啓動並與printenv GNUPGHOME確認您已正確添加它。

    10. 製作一個腳本C:\Users\username\gpg-no-tty.sh並把它付諸表決echo passphrase | gpg --passphrase-fd 0 --batch --no-tty --yes "[email protected]"

      你把你的密碼以明文這裏的原因是因爲--batch選項,這使得它所有的工作,需要喂密碼。對我來說,似乎應該存在一個比計算機上的明文保存密碼更好的解決方案,所以如果你發現更好的東西,請留下評論。

    11. 指向這個腳本的git與git config --global gpg.program C:\\Users\\username\\gpg-no-tty.sh

    12. 現在在Git Bash和IntelliJ中測試您可以提交的內容,並通過執行git verify-commit HEAD來驗證它的工作情況。