将本地 (hg-git) 克隆的上游从 (github) original 更改为 fork

Change upstream of local (hg-git) clone from (github) original to fork

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

然后我意识到我真的想要我自己的 git花鼓叉,所以我做了一个;但我一直无法弄清楚如何切换我现有的本地回购协议。我已经将本地回购设置更改为使用我的叉子的 git:// URL ,它可以拉;但我无法推动我的改变。它告诉我使用 https:// URL,但是当我进行更改时,我既不能拉也不能推——我收到错误 406,"not acceptable."

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

更新

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

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

有了这个,如果我进入 "git-shell" window,我猜它会生成 ssh-agent,然后我可以输入 "hg incoming" 之类的命令并建立连接。所以我有正确的远程回购 URL,并且在 git-shell 生态系统中,我有正确设置的 SSH 密钥。

从常规 CMD.EXE window,相同的命令产生 "Permission denied (publickey)"。在 TortoiseHg 中,当我尝试 "incoming" 操作时出现相同的错误。我更愿意继续使用 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 为 运行.

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

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

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

您可能还必须先将 ssh 密钥添加到您的 GitHub 帐户(根据 step 4 of this page)。

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