1

我发现我贡献的一个 OSS 项目已经转移到了 github。我安装了 hg-git 并从 git:// URL 克隆了一个本地仓库;然后我做了改变。

然后我意识到我真的想要自己的 github 分支,所以我做了一个;但我一直无法弄清楚如何切换我现有的本地仓库。我已将本地 repo 设置更改为使用我的 fork 的 git:// URL,它可以拉取;但我不能推动我的改变。它告诉我使用 https:// URL,但是当我进行更改时,我既不能拉也不能推——我收到错误 406,“不可接受”。

在本地 repo 中完成的工作很少,所以我可以重做,但如果本地 repo 和我的 fork 现在可以连接会更简单。

更新

我已经为 Windows 安装了 Github,所以我可以管理 SSH 密钥。它生成了一个密钥(github_rsa)并将其附加到我的 Github 帐户中。

我编辑了 hgrc 文件并添加了一个[ui]ssh=指向本地 git 'ssh' 命令的设置(埋在 中%APPDATA%\Local\Github)。

有了这个,如果我进入一个“git-shell”窗口,我猜它会产生 ssh-agent,然后我可以输入诸如“hg incoming”之类的命令并建立连接。所以我得到了正确的远程 repo URL,并且在 git-shell 生态系统中,我已经正确设置了 SSH 密钥。

在常规 CMD.EXE 窗口中,相同的命令会产生“Permission denied (publickey)”。在 TortoiseHg 中,当我尝试“传入”操作时会出现相同的错误。我宁愿继续使用 TortoiseHg,但我不确定如何让它使用 SSH。

最后更新

出于某种原因,TortoisePlink 不想使用 github 的 SSH 服务器,至少不想使用 Github-for-Windows 生成的密钥。所以我仍然安装了适用于 Windows 的 Github(不一定是坏事,但对我想做的事情来说是多余的)。

为了让 hg 和 TortoiseHg 连接,我必须修改我的项目设置:

[ui]
ssh = %USERPROFILE%\AppData\Local\GitHub\<salt>\bin\ssh -i %USERPROFILE%\.ssh\github_rsa

即:指向 SSH 命令,随便携式 GitHub 安装,在命令行中指定 github 生成的密钥。使用此配置,我不需要运行 ssh-agent。

4

1 回答 1

1

您需要通过 ssh 推送,这意味着您需要通过以下方式推送:

hg push git+ssh://git@github.com/<login>/<repo>

请注意在git@URL 的第一部分使用 代替您的登录名。这实际上很重要;服务器将通过提供的 SSH 密钥找出您的凭据。

您可能还必须先将您的 ssh 密钥添加到您的 GitHub 帐户(按照本页的第 4 步)。

这假设您通过 GitHub UI 创建了原始 GitHub 存储库的分支;使用 hg-git 推送到空存储库可能需要额外的步骤。

于 2015-05-31T07:46:11.317 回答