git - github SSH 是如何工作的?

标签 git github ssh

我很好奇使用 git 克隆项目。为了克隆我们正在调用的项目:

git clone git@github.com:MY_GIT_USERNAME/PROJECT.git

所以我们在这里所做的,是以用户 git 的身份访问 github.com。我想当有一个 MY_GIT_USERNAME/PROJECT 是某种目录,它添加了一些访问和 key ,然后通过存储库验证到真正的 github 服务器,所以我们通过 git clone 访问的目录是某种代理一,仅用于验证和授权请求,对吗?

github 是否使用某种工具来存储所有 ssh key ?有没有这样的工具?

另外,如果 git clone 不能像这个一样工作,它是如何工作的? which 与典型的 ssh 命令相似是如何工作的?

最佳答案

Git 使用 SSH 建立安全连接,通过它可以执行命令。你在你的 ssh 用户名中传递它,git ,以及要连接的主机,github.com .到目前为止,这是正常的 SSH。

您还可以将路径传递给它以查找您的 Git 存储库,MY_GIT_USERNAME/PROJECT.git .对于普通的 Git,这将是一条文字路径。

为了避免必须为每个 Github 用户创建一个 ssh 用户,Github 忽略了 git用户并使用链接到您的帐户的私有(private) ssh key 来识别您。这是进行 ssh 身份验证的常见方式。

一个简单的实现会将所有存储库存储在文件系统上,如 /git/MY_GIT_USERNAME/PROJECT.git/ ,但是 Github 已经很久很久没有像这样的简单解决方案了。

我不知道 Github 内部是如何工作的,但他们肯定在多个存储库之间共享对象。例如,如果多个存储库提交相同的内容,它很可能只会存储一次。同样,在 Github 上 fork 一个存储库可能实际上并不会复制整个存储库,而是有一个共享存储库。由于 Git 存储库已经基于校验和,这相对容易;虽然在 Github 的规模上,我确信它不是。

要了解更多信息,请阅读 Git Internals .特别Git ObjectsTransfer Protocols .

关于git - github SSH 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61876163/

相关文章:

git - 从 git push 触发 Docker 更新

php - 当使用 php exec() 运行 shell 脚本时,一个脚本可以工作(只执行 git status)而另一个不可用(执行 git checkout)。怎么会?

perl - ssh 问题 - 没有这样的文件或目录

python - 保持python脚本运行并继续bash脚本? (Mac OSX)

git - 是否有任何 git merge-strategies 用于忽略提交或分支 merge 到目标分支的子模块更新?

git - 当我们在vscode中点击 "accept both changes"时, merge 冲突时会执行哪个命令?

git - 如何设置子模块,以便 git clone --recursive 始终占据子模块的主控

git - 从 SSH 克隆 git 存储库时,*.git 扩展名有什么用?

github - 如何创建具有私有(private)访问权限的 Github 页面网站?

php - PHP在另一页中重用SSH连接