【问题标题】:Cannot get git extensions to push something to github SSH problems无法获取 git 扩展以将某些内容推送到 github SSH 问题
【发布时间】:2011-05-05 23:53:11
【问题描述】:

我正在尝试使用 git 扩展,到目前为止我真的很喜欢它,但我没有设法推送到 github。以下命令在 git bash 中运行良好:

git push "origin" master:master

然后当我使用 git 扩展进行推送时,我得到了这个:

C:\Program Files\Git\bin\git.exe push "origin" master:master
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

Done

在 git 设置中,它只选择了 openSSH,我想保留它,因为 putty 似乎更麻烦。

我在 gitextensions 中添加的远程地址,实际上我从 bash 中做的唯一事情就是测试上面的命令并生成 SSH 密钥。其他一切都在 git 扩展中设置。所以我想一切都必须正确设置。例如,电子邮件地址和姓名是正确的...

ssh git@github.com

连接也很好,来自 bash

编辑

所以我可以通过将来自 git-extensions 的命令放入 cmd 来重现错误。显然,从 git bash 和从 cmd 运行和 git-extensions 运行这个命令就像 windows 命令一样......有什么线索吗?

更新: 如果我从 git-extensions 的菜单中选择 git-bash,我会得到一个与在我的 repo 文件夹中右键单击资源管理器并在此处选择 git bash 时完全相同的窗口。现在,在从资源管理器打开的那个中我可以推送,而在从扩展打开的那个中我遇到了公钥问题。

【问题讨论】:

    标签: windows git ssh openssh git-extensions


    【解决方案1】:

    检查事项:

    1. 存在HOME 环境变量。
    2. 那里存在%HOME%\.ssh\ 和 RSA 密钥。

    当您从命令提示符运行 git 时,最好运行 git.cmd,因为它会自动修复 HOME

    @if not exist "%HOME%" @set HOME=%HOMEDRIVE%%HOMEPATH%
    @if not exist "%HOME%" @set HOME=%USERPROFILE%
    

    要修复 gitextensions,请定义 HOME 变量并将其设置为与 USERPROFILE 相同的值

    【讨论】:

    • 感谢您的努力。事实证明,home 变量的变化确实超出了我的意识。
    • 谢谢,我遇到了类似的问题(权限被拒绝公钥)并且设置 HOME 变量有效。
    【解决方案2】:

    好的,我解决了。

    我从 git 扩展中打开了 git bash,并使用 explorer shell 扩展打开了 git bash。然后我从两者运行 ssh -vvv git@github.com 来查看差异。

    事实证明,因为我更改了 git 配置文件的位置(我倾向于不时重新格式化,所以 c:\documents and settings... 是出了名的不利于存储我可能想要持久保存的任何内容) ,当从 git extensions 运行时,git 也在不同的位置寻找 ssh 密钥。所以我添加了我的 git cofig 文件所在的 .ssh 文件夹,现在它可以正常工作了。我认为 git-extensions 将 git 的 HOME 变量设置为您设置为配置文件路径的任何内容。

    现在,这并不明显......

    【讨论】:

    • 只是为了更清楚地使用 git.exe,我认为扩展名使用它在 .ssh 的程序文件中使用 sh.exe 它在用户文件夹中搜索 .ssh 目录文件...只需将一个 .ssh 文件夹中的文件复制到另一个
    • 也发生在我身上。使用 Git Extensions UI 本身的 git bash 告诉我 git 正在 C:\Users\Me\AppData\Local\Ixss\home\me\.ssh 寻找我的密钥,而这正是我的密钥所在的位置。但是,从开始菜单启动 Git Bash 应用程序显示它正在查看 C:\Users\Me\.ssh。出于某种原因,这条路径是 Git Extensions 用于 push/pull/fetch/etc 的路径,即使它自己的 git bash 另有说明
    【解决方案3】:

    正确的答案是来自“max”的答案(手动设置您的 HOME env var),但它可能有助于一些人理解问题发生的原因(随着 Git 在世界各地获得更多用户,这将非常普遍) .

    Cygwin 将 $HOME 设置为 /home/yourname,但该变量在 Windows 环境中是未知的。因此,如果您打开一个 bash 窗口并执行 env | grep HOME 你会看到这里提到的所有三个 'HOME' 变量,你可能想知道为什么 Gitextensions 不使用你正确的 cygwin HOME - 这是因为它的 .bat 文件调用看不到它 - 它只看到你看到的在 Windows 控制台中进行“设置”。

    令人费解的是为什么它稍后不进行此评估并获得正确的 cygwin 路径,因为它知道如何调用 bash,但是(至少在 2.41 之前的版本中)您必须在设置中或在.gitconfig.

    【讨论】:

      【解决方案4】:

      当您直接启动 git bash 时,您将进入 MSYS 的主文件夹。您需要确保 .ssh 子文件夹(相对于主文件夹)中有 ssh 密钥(id_rsa ?)。

      【讨论】:

      • 就是这样。我通常通过 explorer shell 扩展启动 ssh,所以我会立即进入 repo。节省大量打字。问题的一些新进展,请查看我上面的更新。
      【解决方案5】:

      很高兴您解决了问题。因为这听起来像是一个严重的问题,所以我对从 GitExtensions 开始时 git-bash 之间的区别很感兴趣。在 GitExtensions 中有一个设置可以解决这个问题。 %HOME% 目录可以在 GitExtensios 中更改。默认情况下,它将设置为 %HOMEDRIVE%%HOMEPATH%,但您可以覆盖它。更改此设置可能会解决您的问题,因为您认为这是问题所在。要更改此设置,请打开设置对话框并转到选项卡“git”。在“环境”部分中,您可以设置 %HOME% 路径。

      如果您让我知道这是否也能解决问题,我将不胜感激。我也对最初造成这种情况的原因感兴趣。也许我可以改进对有效 HOME 目录的检查。

      【讨论】:

      • 感谢您的调查! +1 基本上,这正是我所做的,但我想我很困惑,因为我最初的意图只是改变 git 配置文件的位置。此条目的设置对话框中的文本显示:“位于环境存储变量 %HOME% 中的全局配置文件。”接下来,它允许您选择“使用默认值作为 HOME”或其他,这给我的印象是它仅与配置文件相关。我认为重写那句话可能是个好主意。现在考虑一下,如果现在从扩展程序调用,git 可能只使用这个配置文件......
      • 据我所知,git-extensions 只是覆盖了 git.exe 的系统环境变量 %HOME%,这不是我从对话框中理解的。在我的情况下,这实际上并不是很理想,除非它与 explorer shell 扩展一致。我一直在寻找的是告诉 git 将其设置存储在自定义位置。
      【解决方案6】:

      是的,不设置 HOME 变量也是我的问题。

      将 HOME 变量设置为 %USERPROFILE% 并重新生成私钥和公钥,然后尝试克隆——它现在应该可以工作了。

      【讨论】:

        【解决方案7】:

        我看到 HOME 变量在 git 扩展中设置为 USERPROFILE。我可以添加和提交,但不能从远程存储库推/拉。我无法连接到任何远程存储库。我们使用 http(不是 ssh)进行连接。但是,使用 git bash 我可以连接到遥控器并进行推/拉。我已经提出了我的问题GIT extensions does not connect to remote but git bash does 并被定向到这个问题。但是,我无法解决我的问题。有什么想法吗?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-12-06
          • 2011-11-24
          • 1970-01-01
          • 2012-05-31
          • 2021-05-28
          • 2021-11-25
          • 2012-06-21
          • 2011-09-02
          相关资源
          最近更新 更多