如何通过 SSH 协议克隆 Github Gist?

Github 似乎真的希望我们使用 HTTPS 协议来使用 Gists,例如,他们只在 Gist 页面上列出 HTTPS URL-例如 https://gist.github.com/donatello/5834862

是否可以使用 SSH 协议克隆 Gist?

51530 次浏览

是的,有可能:

git clone git@github.com:5834862.git

当然,只需用您自己的 Gist ID 替换即可。

Https://help.github.com/articles/which-remote-url-should-i-use#ssh-readwrite——-gitgithubspanspancom

Git@... . . 是 ssh 协议

当您为一个 gist 复制克隆 URL 时,它会显示 https 克隆 URL

https://gist.github.com/5834862.git

https://改为 git@,将 /****.git改为 :****.git

所以在这种情况下

git clone git@gist.github.com:5834862.git

如果你愿意,你可以抓取 这个脚本,并把它放在你的 $PATH的某个地方。一旦这样做了,你可以做以下事情:

  1. 使用 HTTPSgist.github.com克隆任何 gist (或者如果您已经克隆了 gist,只需继续下一步)
  2. 在 gist 的 git 目录树中的任何位置,运行以下命令
git-change-url --to-ssh

现在,假设您的公钥被上传到您的 github 帐户(它应该被列为 给你) ,那么您应该能够通过 SSH使用 gist,而无需输入 github 凭证。

比手动编辑 git 配置文件更不容易出错。

附注: 如果您在脚本中发现任何 bug,或者需要添加任何内容,请随意使用 fork: D

https://改为 ssh://git@应该可以做到这一点,也就是说,改变

https://gist.github.com/donatello/5834862

ssh://git@gist.github.com/donatello/5834862

因此 git clone ssh://git@gist.github.com/...应该克隆该项目(如果您已经在 Github 上添加了 SSH 密钥)

在我个人看来,正式文件对 SSH 并不清楚。

Gist 页面上的下拉列表现在有了 Embed/Share/Clone HTTPS/Clone SSH 选项(但是 SSH 选项只在 登录了时显示) : gist dropdown
这表明了一个不明显的把戏是 省略用户名:

  • 克隆 HTTPS:
    https://gist.github.com/b6f4a53fac485f75afb9150d03efb2f6.git
    无论使用或不使用 .git,无论使用或不使用用户名,都可以为我工作: https://gist.github.com/cben/b6f4a53fac485f75afb9150d03efb2f6 (和通常在 github 上一样,规范的浏览 URL 也适用于 git)

  • 克隆 SSH:
    git@gist.github.com:b6f4a53fac485f75afb9150d03efb2f6.git
    也就是
    ssh://git@gist.github.com/b6f4a53fac485f75afb9150d03efb2f6.git
    不管有没有 .git,我都可以使用,但是不能使用用户名。


我启用了 github 2FA,这让 HTTPS 很痛苦,所以我总是想要 SSH; 以下 ~/.gitconfig对所有要点进行推送翻译:

[url "ssh://git@gist.github.com/"]
# In case I just copy-pasted with username:
# [only works for my (cben) gists, but those are the ones I can push]
pushInsteadOf = https://gist.github.com/cben/
# For gists cloned with official no-username URL:
pushInsteadOf = https://gist.github.com/

对于常规(非主要)回购:

[url "ssh://git@github.com/"]
pushInsteadOf = https://github.com/
[url "ssh://git@bitbucket.org/"]
pushInsteadOf = https://bitbucket.org/
[url "ssh://git@gitlab.com/"]
pushInsteadOf = https://gitlab.com/

附注: 运行 git remote -v是调试 insteadOfpushInsteadOf配置的一种简单方便的方法,它显示了将使用的有效 URL 获取/推送。

为了让它工作,必须从路径中删除用户名,只留下散列/数字。

有可能,试试这个:

git clone git@YOURSSHHOST:YOURGISTIDHERE.git