GitHub 桌面应用正在发送来自已注销用户的提交

The GitHub Desktop app is sending commits from a logged-off user

我已将此作为 issue 发布在桌面应用程序的 GitHub 存储库中,但我只是想看看是否还有其他人也遇到过这种情况。

问题总结

在 GitHub 桌面 GUI 中,当您从用户 A 注销,然后使用用户 B 登录时,您通过桌面 GUI 所做的新提交将被注册为用户 A (不是 B).

重现问题的步骤

  1. 在您的默认浏览器中,使用一个帐户登录 GitHub.com。我们称此帐户为“用户 A”。
  2. 在 GitHub 桌面 GUI 上,单击“文件”>“选项”>“帐户”>“登录”(登录 GitHub.com,而非企业)
  3. 将弹出一个新的 window,提示“使用浏览器登录”。单击“使用浏览器继续”按钮。
  4. 在浏览器中,单击选项以接受来自应用程序的身份验证请求
  5. 如果浏览器提示,允许它使用 GitHub 桌面 GUI 打开身份验证请求。
  6. Load/clone 任何存储库。我们称其为“存储库 X”。
  7. 对“存储库 X”进行一些编辑。
  8. 使用 GitHub 桌面 GUI,提交更改并将它们推送到“存储库 X”的在线存储库。
  9. 使用您的浏览器,转到 GitHub.com,访问“存储库 X”的在线存储库并检查负责其最近提交的用户。它应该被列为“用户 A”。
  10. 从“用户 A”退出您的 GitHub.com 帐户。
  11. 同时从 GitHub 桌面 GUI 上的“用户 A”帐户注销。
  12. 在您的浏览器中,使用另一个帐户登录GitHub.com。我们称此帐户为“用户 B”。
  13. 完成步骤 2、3、4 和 5 中描述的相同过程,以在 GitHub 桌面 GUI 上登录“用户 B”的帐户。
  14. Load/clone 任何 other 存储库。我们称其为“存储库 Y”。
  15. 对您的“存储库 Y”进行一些编辑。
  16. 使用 GitHub 桌面 GUI,提交更改并将它们推送到“存储库 Y”的在线存储库。
  17. 使用您的浏览器,转到 GitHub.com,访问“存储库 Y”的在线存储库并检查负责其最近提交的用户。它应该被列为“用户 A”。

预期行为

我希望对“存储库 Y”的最新提交被注册到“用户 B”,因为在进行提交时 GitHub 桌面 GUI 已登录到“用户 B”。

实际行为

相反,“存储库 Y”的在线存储库将声明最近的提交是由“用户 A”而不是“用户 B”进行的。这可能是由于一些遗留的身份验证文件在我们退出 GitHub 桌面 GUI 时没有被清除。

额外的注释和细节

我在 Windows 10 上使用 GitHub Desktop 2.9.6 (x64)。

如果您无法重现此错误,请在开始第 1 步到第 17 步之前尝试删除 %APP_DATA%\GitHub Desktop 文件夹(通常为 C:\Users\your_username\AppData\Roaming\GitHub Desktop)中的文件。但请先备份您的文件你这样做!!!!

此外,请务必实际使用两个单独的 GitHub 帐户,但只使用一个 Windows 用户。

主要问题

如何确保我在从“用户 A”注销并登录到“用户 B”后使用 GitHub 桌面应用程序所做的提交实际上被注册为“用户 B”所做的提交(不是“用户 A”)?

我目前的解决方案

我目前的解决方案是删除整个 %APPDATA%\GitHub Desktop 文件夹。但这是一个巨大的痛苦,因为我丢失了关于我机器上当前存储库的所有信息,必须一个一个地重新添加它们。

您用来推送到 GitHub 的帐户不一定与您提交的信息相关。 GitHub 通过提交中的电子邮件将提交与帐户相关联,该电子邮件由 user.email 设置。通常该值是在 Git 配置中设置的,而不是由 GitHub Desktop 设置的,尽管您可以配置 GitHub Desktop 来覆盖它。

如果你想为一个特定的仓库配置不同的用户信息,你可以设置user.namewhich is a personal name, not a username)和user.emailgit config user.email MY-EMAIL(分别user.name) 在存储库中。

请注意,身份验证在这里无关紧要,因为将提交推送到由其他人创建的存储库是完全有效的。身份验证信息与您提交的内容完全不同,在这种情况下,后者才是重要的。