gpt4 book ai didi

git - 如何在像 IntelliJ 这样的 IDE 中签署 git 提交?

转载 作者:IT王子 更新时间:2023-10-29 01:25:12 26 4
gpt4 key购买 nike

Question How do I sign git commits using an IDE like IntelliJ on Windows?



如果您有兴趣,请阅读我在这里尝试的内容:

我主要关注 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 上验证。
  • 在同一页面上,我将提交设置为默认签名为 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 添加到我的 0x21318 和重新启动文件中
  • 然后我得到错误 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-agent。
  • 我能找到的最好的 Windows 指南是 Archlinux wiki(是的,对)。它指定将生存时间添加到 gpg: gpg-agent is not available in this session,因此我创建该文件并添加 C:/Users/username/.gnupg/gpg-agent.confdefault-cache-ttl 34560000 https://superuser.com/questions/624343/keep-gnupg-credentials-cached-for-entire-user-session
  • 现在让我们真正启动这个 gpg 代理,https://superuser.com/questions/1153101/why-does-git-complain-that-no-gpg-agent-is-running 让我检查确实 max-cache-ttl 34560000gpg-agent --version 新得多,因此 gpg 14141 可以运行 123 123 到 23141 23
  • 但是我在命令行上没有可用的 gpg2。我安装了 Gpg4win(二进制版本,在底部)甚至 Gnupg 2 单独安装,但这并没有在命令行上给我 gpg2,我注意到我必须在我的程序文件(x86)中文件夹 GNU,我认为我应该有。使用 gpg --version 我发现它至少没有指向我刚刚下载的 gpg,因为那个显示第二个。所以我用 git config --global gpg.program gpg2
  • 将 git 指向了右边的那个
  • 现在我有错误 where gpggpg: skipped "N": secret key not available 中的解决方案是我刚刚做的,所以没有帮助。然后我意识到我用另一个 gpg 设置了一切,而不是用这个。我做了 git config --global gpg.program 'C:\Program Files (x86)\GnuPG\bin\gpg.exe' ,检查了 gpg: skipped "keyid": secret key not available 并再次做了整个事情。实际上我把别名行放在我的 alias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'" 中,所以我不需要每次都运行它。
  • 当我尝试 gpg --version 时,它立即挂起。不知道为什么,我不认为问题是熵不够,因为旧的 gpg 工作正常,但新版本可能需要更多的熵。无论如何,我在 Internet 上找不到任何遇到相同问题的 Windows 用户。
  • 有效!当我在 IntelliJ 中提交时,它只要求输入一次密码短语。但是现在我无法从 Git Bash 提交,出现 .bash_profile 错误,这是有道理的,因为正如我所说的 gpg --gen-key 是空的:没有与此 gpg 关联的 key 。
  • Intellij IDEA signing GIT commits with GPG 是相关的,但唯一的答案是针对 MAC 的,似乎不适用于 Windows。它确实引导我到:
  • me.m01.eu 暗示添加一个名为 no secret key 的新环境变量,它指向 gpg --list-keys 。该目录存在,但正如 git commit signing failed: secret key not available 的回答中所述,我认为我的新 gpg 使用 GNUPGHOME,所以我添加了它。我检查了 C:\Users\username\.gnupg 是否正确添加了它(我不得不重新启动)。虽然没有改变任何东西。
  • 由于我的 key 在 C:\Users\username\AppData\Roaming\gnupg 中,我尝试将环境变量指向那里,但没有帮助,printenv GNUPGHOME 仍然是空的。所以我必须找到另一种方式来指出我的 key 在哪里。
  • C:\Users\username\.gnupg 确实提供了正确的 key ,所以我决定将 gpg --list-keys 添加到我必须创建的 gpg --list-keys --homedir='C:/Users/s156757/.gnupg' 文件中。因为 this bug 。我确认 homedir C:\Users\s156757\.gnupg 归还了我的 key 。仍然是同样的错误,将 C:\Users\username\AppData\Roaming\gnupg\gpg.confgpg --list-keys 添加到这个 conf 文件没有帮助。

  • I can now commit from within IntelliJ but not anymore with Git Bash, which results in skipped "keyid": No secret key.



    更多想法
  • 我没能用 no-tty
  • 将 key 从 gpg 导出到 gpg2
  • 我认为可以单独配置 Gpg4win,所以我不需要每次都输入密码。不幸的是,我找不到任何方法让 Gpg4win 记住我的密码。
  • 后来我想,如果我没记错的话 use-agent 从来没有为 gpg 2 返回任何东西。我后来才发现该命令与 gpg --export [ID] | gpg2 --import &&
    gpg --export-secret-keys [ID] | gpg2 --import
    不同。

  • 简而言之,这是主要问题:gpg-agent 允许密码缓存,但 git 的 gpg 版本与 gpg-agent 版本不匹配,因此您必须先自己安装正确的 gpg 2。但是我没有设法以一种可以从 Git Bash 和 IntelliJ 提交的方式进行安装。

    最佳答案

    从 git 2.19.1 开始,支持 gpg2!
    gpg-agent 现在可以处理自动签名,记住你的密码
    这应该可以更容易地使用 gpg 自动签署提交。
    确切地说,git 版本 2.19.1 至少有 gpg 2.2.9。
    这些说明在 Windows 7、Windows 8.1、Windows 10、Arch Linux 和 Fedora 29 上进行了测试。
    配置 git commit 签名的步骤

  • 建议你已经设置了ssh,参见e.g. help.github.com/en/articles/connecting-to-github-with-ssh(不使用GitHub时也是如此)
  • 启动(在 Linux 上)终端或(在 Windows 上)git bash,检查 git --version git 至少是 2.19.1 和 gpg --version 您正在使用 gpg2。

  • 如果没有,请检查 where gpg(如果 which gpg 命令不可用,则检查 where)最顶层的路径是 git 路径。
  • 如果您没有看到任何路径或没有任何具有 gpg2 的路径,请尝试使用 gpg2 命令而不是 gpg ,因此 gpg2 --version。如果可行,从现在开始,您将不得不使用 gpg2 而不是 gpg
  • 如果你看到一个 git 路径但它不是最上面的,把(在 Windows 上) alias gpg="'C:\path\to\Git\usr\bin\gpg.exe'" 放在你的 C:\Users\username\.bash_profile 中,如果它不存在,则创建该文件,然后重新启动 git bash。再次尝试 where gpggpg --version。从现在开始,将 gpg 输入到文件中,您应该将其替换为 'C:\path\to\Git\usr\bin\gpg.exe'
  • 如果主目录类似于(在 Linux 上) gpg --version 或(在 Windows 上) /home/username/.gnupg ,请检查 /c/Users/username/.gnupg 的输出。该目录不一定存在。

  • 如果路径不正确,请尝试更改它 - 例如,有一次在 Windows 上我看到我的家以我运行命令的路径为前缀,所以我在 .bash_profile 中添加了一个别名 alias gpg="gpg --homedir=/c/Users/s156757/.gnupg" 并重新启动 bash,然后再次检查.
  • 接下来的几个步骤来自好的 Github's guide ,最好检查那里的命令是否仍然正确。首先,generate a new GPG key pair(但不要安装gnupg工具!):运行gpg --full-generate-key
  • 选择RSA和RSA和4096位。
  • 作为真实姓名使用你的 user.name 就像你的 ~\.gitconfig 一样。
  • 作为电子邮件,使用 user.email 中来自 ~\.gitconfig 的电子邮件,确保该电子邮件是 GitHub 上经过验证的电子邮件。
  • 如果您想尝试 gpg-agent(您必须在每次重启后至少提供一次密码),或者如果您对 GitHub 上的“未验证”徽章没有问题,请提供密码。否则,将其留空。
  • 每次您想检查您拥有哪些 key 时,请使用 gpg --list-secret-keys --keyid-format LONG 。现在就做,然后从输出 key_id 中复制 sec rsa4096/key_id 2018-10-27 [SC] ...(从现在开始我将命名您的 key )。
  • gpg --armor --export key_id 打印公钥。
  • Add the GPG key to your GitHub account :转到 Settings | SSH and GPG keys 并添加公钥块(包括页眉和页脚)。
  • Tell Git about your GPG key in Settings > Version Control > Git > Configure GPG Key 如图所示 in Mahozad's answer, please give it an upvotetell git manually : git config --global user.signingkey key_id .
  • 如果之前必须使用--homedir选项,则需要确保git启动gpg时,home也正确更改。创建一个文件 C:\Users\username\start-gpg.sh 并将其放入 gpg --homedir=/c/Users/s156757/.gnupg "$@" 。然后运行 ​​git config --global gpg.program C:\\Users\\username\\start-gpg.sh 告诉 git 使用它。
  • 重启bash。
  • Sign a commit with GPGgit commit -S -m "signed commit" 并确认它已在 Github 上验证,当您查看您的提交时,您应该会看到一个小徽章。
  • 将提交设置为默认使用 git config --global commit.gpgsign true 进行签名。在 IntelliJ 中进行新的提交并验证它是否使用 git verify-commit HEAD 签名。

  • 使提交签名自动发生的步骤:三个选项
    1. 我的 key 上没有密码
    你完成了。
    2.我想试试gpg-agent
    对我来说,这个选项不起作用:我仍然需要经常提供我的密码,尽管并非总是如此。但理论上这是有效的:
  • 更新缓存时间,在 C:\Users\username\.gnupg\gpg-agent.conf 中:如果文件不存在,则创建文件,添加 default-cache-ttl 34560000max-cache-ttl 34560000
  • 使用 gpgconf --kill gpg-agent
  • 重新启动 gpg-agent
  • 现在你应该在提交时输入一次密码,然后不再输入。在 GitHub 上检查您的提交是否为 Verified

  • 3. 将明文密码通过管道传送到 gpg
    这意味着您永远不必提供密码,但对我而言,这意味着 GitHub 在我的提交上放置了 Unverified 徽章。问题在这里: The key whose key-id is in the signature did not sign this commit
  • 如果您已经创建了它,请将 C:\Users\username\start-gpg.sh 的所有内容替换为以下代码。如果没有,请使用以下内容创建文件,删除 --homedir 标志并运行 git config --global gpg.program C:\\Users\\username\\start-gpg.sh 。无论如何,重新启动bash。

  • 是的,您要将密码以明文形式放置在您的计算机上!如果您知道更好的方法,请发表评论...
    # Passphrase-file-descriptor is set to 0 (STDIN), to use it --batch must be used
    # The --pinentry-mode loopback is required since gpg 2.1.0 for --passphrase-fd
    # The "$@" makes sure that whatever git wanted gpg to do, is still done
    echo mypassphrase | gpg --homedir=/c/Users/username/.gnupg --passphrase-fd 0 --batch --yes --pinentry-mode loopback "$@"
  • 提交并推送并检查您是否没有被要求输入密码,并且您的提交在 GitHub 上仍然是 Verified

  • 没有 gpg2 的旧 git 版本的旧答案
    作为引用,这里是完整的说明,或者更确切地说是我为使其工作而做的步骤。对于“工作”,我的意思是提交是自动签名的,但有两个缺点:
  • GitHub 将它们识别为 unverified :The key whose key-id is in the signature did not sign this commit. Someone may be trying to trick you.关于此的后续问题是 The key whose key-id is in the signature did not sign this commit
  • 创建提交需要更长的时间,比如五秒而不是不到一秒。

  • 如果卡住了,请检查问题中的步骤,看看我是否遇到了同样的问题。
  • 前几步来自好的 Github's guide : Generate a new GPG key pair
  • Add the GPG key to your GitHub account
  • Associate a verified (by GitHub) email with your GPG key 并确保您的 .gitconfig 中的姓名和电子邮件相同。
  • Tell Git about your GPG key
  • Sign a commit with GPG 并确认它已在 Github 上验证,当您查看您的提交时,您应该会看到一个小徽章。
  • 将提交设置为默认使用 git config --global commit.gpgsign true 进行签名。进行新的提交并验证它是否使用 git verify-commit HEAD 签名。
  • git自带的gpg版本太旧,所以安装Gpg4win(二进制版本,在底部)应该安装gpg 2。使用where gpg,你应该看到第二个路径,其中的gpg 2121313121313 .如果没有,请尝试从下载页面单独安装 Gnupg 2。
  • 我把 C:\Program Files (x86)\GnuPG\bin\gpg.exe 指向 alias gpg="'C:\Program Files (x86)\GnuPG\bin\gpg.exe'" 命令到我的新 gpg 在我的 gpg 中,重新启动 Git Bash 并使用 g1313p 立即使用 g1313p 1423 进行检查。
  • 添加一个名为 C:\Users\username\.bash_profile 的新环境变量,指向 gpg --version 。重新启动并检查 GNUPGHOME 是否正确添加了它。
  • 制作脚本 C:\Users\username\.gnupg 放入 printenv GNUPGHOME

  • 您在此处将密码短语以明文形式放置的原因是因为 C:\Users\username\gpg-no-tty.sh 选项需要输入密码短语才能使其全部工作。对我来说,似乎应该存在比在计算机上以明文形式保存密码短语更好的解决方案,因此,如果您发现更好的方法,请发表评论。
  • 使用 echo passphrase | "C:\Program Files (x86)\GnuPG\bin\gpg.exe" --passphrase-fd 0 --batch --no-tty --yes "$@" 将 git 指向此脚本。
  • 现在在 Git Bash 和 IntelliJ 中测试您可以提交的内容,并通过执行 --batch 验证它是否有效。
  • 关于git - 如何在像 IntelliJ 这样的 IDE 中签署 git 提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46863981/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com