配置本机配置多个git仓库,包含本机git请求的简单流程

524 阅读3分钟

Git拉取项目

使用git进行开发的时候,一般会经过以下的方式来开始:

  1. 安装git,在git-scm网站,选择一个自己机器适合版本的git
  2. GitHub或者组织的gitlab中拉取一个项目进行开发
  3. clone or download这里赋值一个链接,格式如:git@github.com:user(group)/project.git
  4. 在指定目录中使用
git clone git@github.com:user(group)/project.git

完成了git clone之后,便可以在原有项目的基础上开发了


本机配置单个git仓库

为什么需要配置SSH key?

  • 假如不在git仓库中配置ssh key,每次使用git命令操作的时候,会要求输入密码。
  • 本机生成一个ssh key并且在git仓库中配置上去了的话,每次就不需要输入密码。

步骤:

  1. 首先,在本机通过命令行,输入下面的命令:
ssh-keygen -t rsa -C "mail@mail.com"
  • 可以在后面加上** -f filename **指定文件名,这里需要是全路径
  • 输入该命令后,会让你有一些操作,不过可以不管,疯狂回车就行
  • 该命令会生成一个ssh key,所在的目录是 ~/.ssh ,可以通过命令行cd到该目录中,可以看到两个文件:id_rsa,id_rsa.pub
  • id_rsa是本机的一个密钥,id_rsa.pub是对外的密钥
  • ssh配置中,两个机器互连需要把客户端的id_rsa.pub.pub文件内容,配置到服务器中
  1. 到你的github或者gitlab页面中,选中你头像,进入到settings中的ssh key,把你的id_rsa.pub.pub内容拷贝到里面去

这个时候,其实就可以直接使用git的命令而不用输密码了


本机配置多个git仓库

上面的操作搞两次,不过有三个额外的操作:

  1. -f命令用上,区分开不同仓库的ssh key
  2. ~/.ssh目录中添加一个config文件(指定ssh key就在这里面)
  3. config文件中些类似这样的内容:
# GitLab.com server
Host gitlab.company.com
PreferredAuthentications publickey
IdentitiesOnly yes
IdentityFile ~/.ssh/gitlab_id_rsa

# Github server
Host github.com
PreferredAuthentications publickey
IdentitiesOnly yes
IdentityFile ~/.ssh/github_id_rsa

ok了,大功告成了。

  • 如果在网上找的,说需要先ssh-agentssh-add的话,不要信他,原因后面说。
  • 如果没有成功,输入下面的命令查看问题出在哪个环节
ssh -Tv git@github.com
或者
ssh -Tv git@gitlab.company.com

客户端访问远端git原理(基于ssh -Tv 命令来说)

  1. 一次git对远端操作的命令,实际上是一次ssh访问,git仓库服务器将请求转化成了git@xxx.git形式
  2. 客户端发起ssh请求的时候,会去查看本地 ~/.ssh/config 文件,获取配置信息(~/ 指的是当前用户目录如:c:Users/zaiyu/.ssh/config
  3. 如果请求的域名能匹配上config文件中的Host字段,则读取该域名的配置。以git clone git@github.com请求,和下面的配置为例:
# GitLab.com server
Host gitlab.company.com
IdentityFile ~/.ssh/gitlab_id_rsa
  • git clone git@github.com请求匹配上了Host gitlab.company.com
  • 读取到IdentityFile字段,表示指定了发起ssh请求的ssh key文件,文件目录为 ~/.ssh/gitlab_id_rsa

大体上客户端的访问,就是这样的步骤。以下是一些额外事项:

  • config文件还有一个配置值,Port,该值表示git仓库服务器所在的端口。
  • 如果git服务器使用的是gitlab,而且是通过docker安装的。那么如果自定义了端口映射的话,可能用得上该字段。
  • config文件有些什么其它配置值,可以查阅其它资料,在配置git这里一般用不上。

再说一下ssh-agentssh-add是怎么回事:

  • ssh-agent表示当前你所在的terminal是通过ssh代理了的
  • ssh-add必须在ssh-agent之后执行,因为ssh-add只能为被代理了的terminal服务。
  • 也就是说,假如当前这个命令行中,你执行到了ssh-add ~/.ssh/github_id_rsa。你再重新开一个命令行,你的一切配置依然没有生效。