【Git】Git-01-Git的安装与基本配置
摘要:
Git是 一个开源的分布式版本控制系统,本文主要介绍在ubuntu
下Git
的安装和一些基本的命令。
【说明】所用环境VMwareWorkstation16.0 + Ubuntu18.04.6 + Win10
1.git
的几个网址和术语表
git
官网
git
官网地址:git
官网
1 | https://git-scm.com/ |
git
文档
git
官方文档地址:git
官方文档
1 | https://git-scm.com/doc |
Pro Git
Pro Git Book
的中文版地址:Pro Git
简体中文版
该书详细介绍了git
的起源,历史以及应用配置等,讲解很详细,想要深入研究的话,不失为一本好书。
1 | https://git-scm.com/book/zh/v2 |
git
各个工作区域及切换的命令
git
官网提供了一个在各个工作区域切换的一个演示界面(不过有时候可能进不去),该界面提供了切换不同工作区域的命令及命令说明,可以选择中文版的,网址如下。
Visual Git Cheat Sheet
地址:Visual Git Cheat Sheet
1 | https://ndpsoftware.com/git-cheatsheet.html |
git
的一个快速使用指南
git
中文版备忘单地址:GitHub Cheat Sheet
1 | https://training.github.com/downloads/zh_CN/github-git-cheat-sheet/ |
git
术语表(摘录自官网)
术语 | 说明 |
git | 一个开源的分布式版本控制系统 |
GitHub | 一个托管和协作管理 Git 仓库的平台 |
commit 提交 | 一个 Git 对象,是你整个仓库的快照的哈希值 |
branch 分支 | 一个轻型可移动的 commit 指针 |
clone | 一个仓库的本地版本,包含所有提交和分支 |
remote 远端 | 一个 GitHub 上的公共仓库,所有小组成员通过它来交换修改 |
fork | 一个属于另一用户的 GitHub 上的仓库的副本 |
pull request 拉取请求 | 一处用于比较和讨论分支上引入的差异,且具有评审、评论、集成测试等功能的地方 |
HEAD | 代表当前的工作目录。使用git checkout 可移动 HEAD 指针到不同的分支、标记(tags)或提交 |
2.git
的安装
Linux
下的Git
官方安装指南
下载地址:Download for Linux and Unix
。
- 最新版本安装命令
1 | 安装最新版本的 git |
- 一般安装
1 | apt-get install git |
- 查看
git
安装版本
查看git
的版本,安装成功,则会显示相应的版本号。
1 | git --version |
3.git
的基本配置
3.1什么是ssh
?
SSH
SSH
为Secure Shell
的缩写,由IETF
的网络小组(Network Working Group
)所制定,是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境,其保证数据安全的原理是非对称加密。
对称加密 | 使用的是一套秘钥,数据的加密以及解密用的都是同一套秘钥,当所有的客户端以及服务端都需要保存这套秘钥时,泄露的风险很高,而一旦秘钥便泄露便保证不了数据安全。 |
非对称加密 | 包含两套秘钥——公钥以及私钥,其中公钥用来加密,私钥用来解密,并且通过公钥计算不出私钥,因此私钥谨慎保存在服务端,而公钥可以随便传递,即使泄露也无风险。 |
SSH
在正确使用时可弥补网络中的漏洞;SSH
是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议;利用SSH
协议可以有效防止远程管理过程中的信息泄露问题。
SSH
最初是UNIX
系统上的一个程序,后来又迅速扩展到其他操作平台。SSH
客户端适用于多种平台。几乎所有UNIX
平台—包括HP-UX
、Linux
、AIX
、Solaris
、Digital UNIX
、Irix
,以及其他平台,都可运行SSH
。
SSH
登录方式
方式 | 说明 |
密码登录 | 1.服务端收到登录请求后,首先互换公钥; 2.客户端用服务端的公钥加密账号密码并发送; 3.服务端用自己的秘钥解密后得到账号密码,然后进行验证; 4.服务端用客户端的公钥加密验证结果并返回; 5.客户端用自己的秘钥解密后得到验证结果. |
公钥登录 (证书登录) |
1.客户端用户必须手动地将自己的公钥添加到服务器一个名叫authorized_keys的文件里,顾名思义,这个文件保存了所有可以远程登录的机器的公钥; 2.客户端发起登录请求,并且发送一个自己公钥的指纹(具有唯一性,但不是公钥); 3.服务端根据指纹检测此公钥是否保存在authorized_keys中; 4.若存在,服务端便生成一段随机字符串,然后利用客户端公钥加密并返回; 5.客户端收到后用自己的私钥解密,再利用服务端公钥加密后发回; 6.服务端收到后用自己的私钥解密,如果为同一字符串,则验证通过. |
【参考文章】
【注意】:下边配置的便是通过公钥登录实现与Github
的无密码登录,另外说明一点就是有的参考资料可能需要科学上网才看查看。
3.2检查ssh
是否可以连接到github
- 检查命令
1 | ssh -T git@github.com |
- 连接失败
若出现以下提示,则不能连接到github
,需要重新配置,按照3.2节
配置即可。
1 | The authenticity of host 'github.com (20.205.243.166)' can't be established. |
- 连接成功
若连接成功,则会有如下提示,可以跳过3.2
节,开始使用git
。
1 | Hi qidaink! You've successfully authenticated, but GitHub does not provide shell access. |
3.2安装ssh keys
【注意】:要在~/.ssh
目录中进行
- 检查相应的文件是否存在
主要是检查文件id_rsa(私钥)
和id_rsa.pub(公钥)
是否存在。
1 | cd ~/.ssh |
发现没有id_rsa(私钥)
和id_rsa.pub(公钥)
这两个文件,说明没有ssh keys
- (若有这两个文件)移除当前的
id_rsa(私钥)
和id_rsa.pub(公钥)
1 | rm ~/.ssh/id_rsa* |
- 重新生成
id_rsa
和id_rsa.pub
1 | ssh-keygen -t rsa -C "user's github email address" |
user's github email address
就是自己注册github
时的邮箱。执行后会出现以下提示信息,其中有两次是让用户选择文件生成位置及设置密码的,不输入,直接按三次enter
按键,表示路径默认,不需要密码。
1 | Generating public/private rsa key pair. |
- 打开
~/.ssh
文件夹
1 | 进入文件夹 |
- 添加
ssh keys
到github
【Github
】→【登录账号】→【头像】→【Setting
】→【SSH and GPG keys
】→【SSH keys
】→【New SSH key
】
添加完毕后会收到一封邮件,表示已经添加成功。
- 按
3.1节
再次检查是否可以正常连接
1 | ssh -T git@github.com |
3.3git
用户信息配置
- 对
commit
操作设置关联的用户名
1 | git config --global user.name "[name]" |
- 对commit操作设置关联的邮箱地址
1 | git config --global user.email "[email address]" |
- 启用有帮助的彩色命令行输出
1 | git config --global color.ui auto |
- 文本编辑器设置
用户信息已经设置完毕,就可以配置默认文本编辑器了,当 git
需要输入信息时会调用它。 如果未配置,git
会使用操作系统默认的文本编辑器。
1 | 若想使用Emacs编辑器,则可以用该命令,但是一般默认就可以 |
- 对
LF
和CRLF
的处理
Linux
系统和Windows
系统下的换行符不一样,Linux
是\n
,即LF
,Windows
下面是\r\n
,即CRLF
,git
在维护版本库的时候统一使用的是LF
。所以当文档跨平台进行编辑的时候,换行符就会产生差别,在不同平台编辑过得文件在进行commit
的时候也会有相应的换行符警告。
1 | LF will be replaced by CRLF in ....... |
那么怎么处理呢?这样就可以了(不过这样似乎只是治标不治本,仅仅是忽略了检查,要是文章的话还好,要是代码的话,有可能会因为换行符而出现问题,暂时先这样解决)。
1 | git config --global core.autocrlf false |
- 查看配置情况
1 | 查看配置 |
会显示以下信息(使用的是第一个命令):
1 | user.name=[name] |
global
选项
如果使用了 --global
选项,那么该命令只需要运行一次,因为之后无论在该系统上做任何事情, Git 都会使用那些信息。 当想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global
选项的命令来配置。