我对使用 git 克隆项目很好奇。为了克隆一个项目,我们调用:
git clone git@github.com:MY_GIT_USERNAME/PROJECT.git
Run Code Online (Sandbox Code Playgroud)
所以我们在这里所做的是以 git 用户身份访问 github.com。我想,当存在 MY_GIT_USERNAME/PROJECT 时,是某种目录,其中添加了一些访问权限和密钥,然后使用存储库对真实的 github 服务器进行验证,因此我们通过 git clone 访问的目录是某种代理一,仅用于验证和授权请求,对吗?
github 是否使用某种工具来存储所有 ssh 密钥?有这样的工具吗?
另外,如果 git clone 不像这个那样工作,它是如何工作的?与典型的 ssh 命令类似,它是如何工作的?
Sch*_*ern 10
Git 使用 SSH 建立安全连接,通过该连接可以执行命令。您将其传递到您的 ssh 用户名git和要连接的主机中github.com。到目前为止,这是正常的 SSH。
您还可以向其传递查找 Git 存储库的路径,MY_GIT_USERNAME/PROJECT.git. 对于普通的 Git,这将是一个文字路径。
为了避免为每个 Github 用户创建一个 ssh 用户,Github 会忽略该git用户并使用链接到您帐户的私有 ssh 密钥来识别您。这并不是一种不常见的 ssh 身份验证方法。
一个简单的实现会将所有存储库存储在一个文件系统上,例如/git/MY_GIT_USERNAME/PROJECT.git/,但 Github 已经有很长很长的历史了,就像这样的简单解决方案。
我不知道 Github 内部是如何工作的,但他们肯定是在多个存储库之间共享对象。例如,如果多个存储库提交相同的内容,则很可能它只会存储一次。同样,在 Github 上分叉一个存储库可能实际上并不会复制整个存储库,而是拥有一个共享存储库。由于 Git 存储库已经基于 checkum,因此这相对容易;尽管以 Github 的规模来看,我确信事实并非如此。
要了解更多信息,请阅读Git 内部原理。特别是Git 对象和传输协议。
这只是一般的 SSH 身份验证。一般来说,URL 包含有关传输协议、远程服务器地址以及存储库路径的信息。id_rsa.pub您将在其中将(.pub文件是您的公钥)提供给 Github 的 SSH 密钥。id_rsa然后,当您连接到 Github 时,您的文件夹中就会有私钥~/.ssh,该私钥将用于通过 Github 验证您的信息。您将锁(公钥)放在您想要轻松访问的任何服务器上,并将(私钥)密钥保留在您的计算机上,并使用它登录到这些服务器;他们看到你有一把能开锁的钥匙,就让你进去了。
| 归档时间: |
|
| 查看次数: |
5360 次 |
| 最近记录: |