摘要:
  Git是 一个开源的分布式版本控制系统,本文主要介绍在ubuntuGit的安装和一些基本的命令。

【说明】所用环境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
2
3
4
# 安装最新版本的 git
sudo add-apt-repository ppa:git-core/ppa
sudo apt update
sudo apt-get install git
  • 一般安装
1
apt-get install git
  • 查看git安装版本

  查看git的版本,安装成功,则会显示相应的版本号。

1
git --version

3.git的基本配置

3.1什么是ssh

  • SSH

  SSHSecure Shell的缩写,由IETF的网络小组(Network Working Group)所制定,是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境,其保证数据安全的原理是非对称加密

对称加密   使用的是一套秘钥,数据的加密以及解密用的都是同一套秘钥,当所有的客户端以及服务端都需要保存这套秘钥时,泄露的风险很高,而一旦秘钥便泄露便保证不了数据安全。
非对称加密   包含两套秘钥——公钥以及私钥,其中公钥用来加密,私钥用来解密,并且通过公钥计算不出私钥,因此私钥谨慎保存在服务端,而公钥可以随便传递,即使泄露也无风险。

  SSH在正确使用时可弥补网络中的漏洞;SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议;利用SSH协议可以有效防止远程管理过程中的信息泄露问题。

  SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UXLinuxAIXSolarisDigital UNIXIrix,以及其他平台,都可运行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
2
3
4
5
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,20.205.243.166' (ECDSA) to the list of known hosts.
git@github.com: Permission denied (publickey).
image-20220108212328636
  • 连接成功

  若连接成功,则会有如下提示,可以跳过3.2节,开始使用git

1
Hi qidaink! You've successfully authenticated, but GitHub does not provide shell access.
image-20220108213009689

3.2安装ssh keys

  【注意】:要在~/.ssh目录中进行

  • 检查相应的文件是否存在

  主要是检查文件id_rsa(私钥)id_rsa.pub(公钥)是否存在。

1
2
cd ~/.ssh
ls
image-20220108220705441

  发现没有id_rsa(私钥)id_rsa.pub(公钥)这两个文件,说明没有ssh keys

  • (若有这两个文件)移除当前的id_rsa(私钥)id_rsa.pub(公钥)
1
rm ~/.ssh/id_rsa*
  • 重新生成id_rsaid_rsa.pub
1
ssh-keygen -t rsa -C "user's github email address"

  user's github email address就是自己注册github时的邮箱。执行后会出现以下提示信息,其中有两次是让用户选择文件生成位置及设置密码的,不输入,直接按三次enter按键,表示路径默认,不需要密码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hk/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hk/.ssh/id_rsa.
Your public key has been saved in /home/hk/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:cfJKNOMTwZf3j6t7aqbEqosgtQ2z0d0PWe+TckfHsZQ 2038035593@qq.com
The key's randomart image is:
+---[RSA 2048]----+
| .. . |
| ..o . .|
| B.o. . E |
| . . + @ . o.o|
| = . . S . . .+o|
| . B . * . o...|
|. + . . = = .. |
| . . . o oooo |
| . oo. .++= |
+----[SHA256]-----+
  • 打开~/.ssh文件夹
1
2
3
4
5
# 进入文件夹
cd ~/.ssh
# 会发现生成了id_rsa和id_rsa.pub文件
# 编辑器打开文件,并复制所有内容
gedit id_rsa.pub
  • 添加ssh keysgithub

Github】→【登录账号】→【头像】→【Setting】→【SSH and GPG keys 】→【SSH keys】→【New SSH key

image-20220108221913272

添加完毕后会收到一封邮件,表示已经添加成功。

image-20220108222227365
  • 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
2
# 若想使用Emacs编辑器,则可以用该命令,但是一般默认就可以
git config --global core.editor emacs
  • LFCRLF的处理

  Linux系统和Windows系统下的换行符不一样,Linux\n,即LFWindows下面是\r\n,即CRLFgit在维护版本库的时候统一使用的是LF。所以当文档跨平台进行编辑的时候,换行符就会产生差别,在不同平台编辑过得文件在进行commit的时候也会有相应的换行符警告。

1
LF will be replaced by CRLF in .......

那么怎么处理呢?这样就可以了(不过这样似乎只是治标不治本,仅仅是忽略了检查,要是文章的话还好,要是代码的话,有可能会因为换行符而出现问题,暂时先这样解决)。

1
git config --global core.autocrlf false
  • 查看配置情况
1
2
3
4
# 查看配置
git config --list
# 查看配置并显示配置文件所在位置
git config --list --show-origin

  会显示以下信息(使用的是第一个命令):

1
2
3
user.name=[name]
user.email=[email address]
color.ui=auto
  • global选项

  如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论在该系统上做任何事情, Git 都会使用那些信息。 当想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。