远程仓库(上):git clone

在上面的教程中,我们主要在本地仓库给大家演示了Git的使用方法,而在实际开发活动中,代码仓库一般都是保存在服务器上的,或者托管在第三方网站上(比如GitHub、Gitee等)。我们需要将我们本地的仓库推送(push)到远程仓库上,或者从远程仓库上拉取(pull)代码到本地,比较常用的三个命令是:git clone、git push和git pull。

如果你想将远程仓库中的一个软件工程克隆到本地自己的电脑上,git clone命令可以完成这个功能。以Gitee为例,在我的Gitee主页上托管着几个项目,假如你想克隆到本地电脑上,可以使用下面的命令:

# git clone https://github.com/wangwit/git_lesson.git
# git clone ssh://git@github.com:wangwit/git_lesson.git

无论是GitHub还是Gitee,项目的仓库地址一般会提供多个,前面的https或ssh分别代表不同的网络协议,HTTPS只有读的权限,你将远程仓库克隆到本地后,后续可以使用git pull命令继续更新,但是没有写的权限。如果你想把你本地仓库的修改推送到远程仓库上,首先你要有写的权限,SSH协议则支持写,支持用户的远程推送(push)。

除了这两种协议外,还有一种Git自带的协议,这三种常见的网络协议之间的比较如下:

Git协议:Git自带的网络协议,优点是传输速度快,缺点是授权机制不灵活,要么不能推送,要么都能推送。使用与不需对读进行授权的大型项目

HTTP/HTTPS协议:优点是容易架设,适用于提供只读的仓库、防火墙穿透强。缺点是传输速度慢、开销大。

SSH协议:同时支持读和写的网络协议,SSH协议也是Git默认使用的网络协议,SSH协议的优点是安全性高,数据传输都是加密和授权的,缺点是不能匿名访问,读也要授权,不利于开源的项目。

如果你想具有推送(push)的权限,你要使用SSH协议去克隆远程仓库,然后通过SSH协议远程访问。熟悉SSH访问的朋友可能都知道,SSH远程登录服务器都是需要账号密码的,如果每次登录都输入密码,每次push都输入密码,太麻烦了,那怎么办?有没有更简洁方便的方法呢?

答案是有的,可以使用SSH key。SSH key是服务器的一种授权访问机制,它的工作原理就跟天地会的各地分舵成员对暗号一样:

天王盖地虎 <-------> 宝塔镇河妖         通过
天王盖地虎 <-------> 小鸡炖蘑菇         不通过

那时候没有手机,没法视频,也无法人脸识别,如何找到精准的接头的那个人,只能靠对暗号了。SSH key的工作原理也是类似,我们可以通过SSH命令生成一对密钥,公钥放到服务器上,私钥放到自己的电脑里,当你使用SSH访问服务器是,SSH服务进程就会通过这对秘钥来配对,来判断这个访问用户是否有权限访问。在Linux环境下,生成秘钥的命令如下:

# ssh-keygen -t rsa – C “litao.wang@qq.com”
Generating public/private rsa key pair.
Enter file in which to save the key (/home/wit/.ssh/id_rsa): 
Created directory '/home/wit/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/wit/.ssh/id_rsa.
Your public key has been saved in /home/wit/.ssh/id_rsa.pub.

参数-t用来指定秘钥类型,默认是rsa,可以省略。-C用来设置注释文字,可以是一个邮箱。遇到配置选项,直接敲回车键,使用默认的存储路径,命令运行无误,就会在当前用户目录(~/.ssh)下生成一对秘钥。

wit@ubuntu:~$ cd .ssh/
wit@ubuntu:~/.ssh$ ls
id_rsa  id_rsa.pub

一对密钥生成后,私钥是id_rsa,一般放置在当前用户的家目录下:~/.ssh。公钥是id_rsa.pub,一般要放到服务器上,或者上传到第三方代码托管网站(如GitHub、Gitee)上。

《Linux三剑客》视频教程,从零开始快速掌握Linux开发常用的工具:Git、Makefile、vim、autotools、debug,免费赠送C语言视频教程,C语言项目实战:学生成绩管理系统。详情请点击淘宝链接:Linux三剑客