如何将与 GitHub 的连接从 SSH 更改为 HTTPS?

Posted

技术标签:

【中文标题】如何将与 GitHub 的连接从 SSH 更改为 HTTPS?【英文标题】:How to change a connection to GitHub from SSH to HTTPS? 【发布时间】:2015-08-21 09:35:43 【问题描述】:

我昨天在 GitHub 上创建了我的第一个存储库。建立连接时,我使用 SSH 而不是 HTTPS,所以我经历了一个痛苦的 SSH 密钥创建和连接过程。在某些时候,我被卡住了,连接失败了。那时我想知道如何恢复我开始的过程并从 HTTPS 连接开始。令人高兴的是,今天我通过 SSH 建立了连接,但我想知道能够更改连接类型(SSH 与 HTTPS)的价值以及是否有办法做到这一点。

【问题讨论】:

如果你想将git push本地修改为github,你最好保持ssh连接。阅读一些 ssh 教程,并配置私钥和公钥以避免多次输入密码。 @BasileStarynkevitch,SSH 和 HTTPS 连接都可用于push 到 GitHub(和许多其他主机)。 我通常对 .git/config 文件进行文本编辑,而不是 git remote set-url。您只需要在某些 repo 服务器上观察两者的不同 url 结构。 我经常使用 https 作为 fetch url 和 ssh 作为 Push url,好处是我不需要解锁我的 ssh 密钥来随机获取。 【参考方案1】:

假设你的遥控器叫做origin,运行

git remote set-url origin https://... git remote set-url --push origin https://...

您可以使用git remote -v 查看配置的遥控器,现在应该会显示您更新后的网址。

更多详情请见the documentation for git-remote

【讨论】:

【参考方案2】:

这里有一些别名(oneliners)可以将你的 repo 从 ssh 切换到 https 并返回。假设您的默认遥控器名为 origin 并且您的遥控器是 github.com

alias git-https="git remote set-url origin https://github.com/$(git remote get-url origin | sed 's/https:\/\/github.com\///' | sed 's/git@github.com://')"
alias git-ssh="  git remote set-url origin git@github.com:$(    git remote get-url origin | sed 's/https:\/\/github.com\///' | sed 's/git@github.com://')"

它们比使它们具有幂等性所需的时间长一些

【讨论】:

谢谢。以下版本适用于非 github.com 和路径中有或没有前导 / 的 URL:git remote set-url origin $(git remote get-url origin | sed 's/^git@\(.*\):\/*\(.*\).git/https:\/\/\1\/\2.git/') .. 和 @TimBunce 的版本相反:git remote set-url origin $(git remote get-url origin | sed 's/^https:\/\/\([^\/]*\)\/\(.*\).git/git@\1\:\2.git/')(假设结果的路径中不应有前导 /)。【参考方案3】:

把这些别名定义放在你的~/.bashrc:

alias git-ssh='git remote set-url origin "$(git remote get-url origin | sed -E '\''s,^https://([^/]*)/(.*)$,git@\1:\2,'\'')"'

alias git-https='git remote set-url origin "$(git remote get-url origin | sed -E '\''s,^git@([^:]*):/*(.*)$,https://\1/\2,'\'')"'

那么,

https切换到sshgit-sshssh切换到httpsgit-https

通过 github.comgitlab.com repos 成功测试。

注意:我使用-E 表示扩展正则表达式,我使用逗号而不是通常的斜线来分隔替换操作的各个部分。这些共同帮助减少了leaning toothpick syndrome。

【讨论】:

以上是关于如何将与 GitHub 的连接从 SSH 更改为 HTTPS?的主要内容,如果未能解决你的问题,请参考以下文章

解决GitHub每次push时都提示输入用户名和密码的问题

如何将路径从 apache 更改为 nginx

连接网络时如何检测网络更改并将活动从 A 更改为 B

如何在连接字符串中将 Access DB 从 ISO-8859-2 更改为 UTF-8?

多个github帐户错误

在 javascript 模式下将连接器类型从 javascript 更改为 Database Reader?