第一章 Git版本控制工具入门

一、版本控制工具概述

1. 版本控制

工程设计领域中使用版本控制管理工程蓝图的设计过程。在 IT 开发过程中也可以使用版本控制思想管理代码的版本迭代。

思想:版本控制
实现:版本控制工具

2.版本控制工具功能

1.协同修改
2.多人并行不悖的修改服务器端的同一个文件。
3.数据备份
4.不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
5.版本管理
6.在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,提高运行效率。这方面SVN采用的是增量式管理的方式,而Git采取了文件系统快照的方式。
7.权限控制
8.对团队中参与开发的人员进行权限控制。
9.对团队外开发者贡献的代码进行审核——Git 独有。
10.历史记录
11.查看修改人、修改时间、修改内容、日志信息。
12.将本地文件恢复到某一个历史状态。
13.分支管理
14.允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。

3.版本控制工具

1)集中式版本控制工具

CVS、SVN、VSS……

image

2)分布式版本控制工具

Git、Mercurial、Bazaar、Darcs……

image

二、Git工具概述与安装

1.Git的简介

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而是一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必有服务器端软件支持。

2.Git简史

image

官网地址:https://git-scm.com/

image

4.Git优势

1.大部分操作在本地完成,不需要联网
2.完整性保证
3.尽可能添加数据而不是删除或修改数据
4.分支操作非常快捷流畅
5.与 Linux 命令全面兼容

5.Windows下Git安装

image

image

image

image

image

image

image

image

image

6.Centos下Git安装

#1.安装
[root@m01 ~]# yum -y install git

#2.查看Git版本
[root@m01 ~]# git --version
git version 1.8.3.1

#3.修改基本配置
[root@m01 ~]# git config  --global user.name  "jh"
[root@m01 ~]# git config  --global  user.email "974089352@qq.com"

#4.查看配置
[root@m01 ~]# git config  -l
user.name=jh
user.email=974089352@qq.com

三、Git仓库概述

git仓库本地库对应的就是一个目录,这个目录中的所有文件被git管理起来。以后会将一个项目的根目录,作为仓库。仓库中的每个文件的改动都由git跟踪。

1.Git结构

image

2.Git 和代码托管中心

代码托管中心的任务:维护远程库
1.局域网环境下
GitLab 服务器

2.外网环境下
Gitee
GitHub
码云

3.Git本地库和远程库

1)团队内部协作

image

2)跨团队协作

image

四、Git命令行操作

1.本地库初始化

#1.新建仓库
[root@m01 ~]# mkdir test

#2.初始化空的 Git 版本库
[root@m01 ~]# cd test/ 
[root@m01 ~/test]# git init
Initialized empty Git repository in /root/test/.git/

#3.查看仓库
[root@m01 ~/test]# ll -a
total 0
drwxr-xr-x  3 root root  18 Dec 22 19:33 .
dr-xr-x---. 4 root root 215 Dec 22 19:33 ..
drwxr-xr-x  7 root root 119 Dec 22 19:33 .git

2.设置签名

1.形式
用户名:hui.jin
Email 地址:hui.jin@atom-intelligence.com

2.作用:
区分不同开发人员的身份

3.辨析:
这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关  系。

4.命令
1)项目级别/仓库级别:仅在当前本地库范围内有效
[root@m1 ~/test]# git config user.name hui.jin
[root@m1 ~/test]# git config user.email hui.jin@atom-intelligence.com
[root@m1 ~/test]# cat .git/config 
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[user]
	name = hui.jin
	email = hui.jin@atom-intelligence.com
信息保存位置:./.git/config 文件

2)系统用户级别:登录当前操作系统的用户范围
[root@m1 ~]# git config  --global  user.name jin.hui
[root@m1 ~]# git config  --global  user.email jin.hui@atom-intelligence.com
[root@m1 ~]# git config  -l
user.name=jin.hui
user.email=jin.hui@atom-intelligence.com
信息保存位置:~/.gitconfig 文件

3)级别优先级
就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别  的签名
如果只有系统用户级别的签名,就以系统用户级别的签名为准
二者都没有不允许

五、Git基本操作

1.创建远程仓库

#1.Github上创建仓库

#2.Gitee上创建仓库(以此为例)

image

选择语言,其他按照自己需求的来.

image

2.链接远程仓库

1)通过HTTPS连接远程仓库

[root@m01 ~/test]# git remote  add  origin https://gitee.com/jhno1/oldboy-jenkins.git

ps: 点击克隆/下载选择HTTPS方式,复制链接

2)通过ssh方式连接

1.生成公钥对,一直回车即可
[root@m01 ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:CLeRI42hKnREMfbbwLYXmrpmx4NvYHHJvgI8NMPkDaM root@m01
The key's randomart image is:
+---[RSA 2048]----+
|  .*o            |
| +o.++ .         |
|=.=.==B.         |
|EB.o.BB=.        |
|= o +=ooS        |
|.+ o...          |
|  +.+ .          |
|   =.*           |
   o.=..          |
+----[SHA256]-----+    

2.查看公钥
[root@m01 ~]# cat  /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1EV7n0r+ma/6Lj5FKM1QaWy2w7au2qvvFY/+bmhcFv86b
XXn3AVKgWhSrzqZPZzSkiuFAATzXqjGl8WJ9EYBamCgYqV/bzysS5BPI2f31zjkgX2XKNzcMHzXKw6GEG4X0
0qVmwJq2ajSxSrnaLzZRpV9lTdDtSO8WIVZGxWRPiU3aZvq/tFW08fQBKKcV5AlY04WVlRCZZKpKhZ1opmGK
oqmJ6nh/vJVeCohvrdMhjDtj6zvciHf3sJGAxY6zmH6PaeV+lZS+3pbGR24KIEdARoJuCpSw2NbBo40dn9Mn
Apsl0K+l2L57Aw+kvmXXd886ZnIIMLwopKumEM4n+xeB root@m01

3.复制公钥配置到Gitee仓库
# 管理--> 部署公钥管理-->添加公钥

4.返回克隆下载复制ssh链接执行
[root@m01 ~/test]# git remote  add origin git@gitee.com:jhno1/oldboy-jenkins.git

5.查看远程连接
[root@m01 ~/test]# git remote  -v
origin	https://gitee.com/jhno1/oldboy-jenkins.git (fetch)
origin	https://gitee.com/jhno1/oldboy-jenkins.git (push)

6.删除远程连接
[root@m01 ~/test]# git remote rm origin

3.Git同步远程仓库内容

# 当本地没有代码仓库时
[root@m01 ~/test]# git clone  https://gitee.com/jhno1/oldboy-jenkins.git
Cloning into 'oldboy-jenkins'...
Username for 'https://gitee.com': jhno1
Password for 'https://jhno1@gitee.com': 
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), done.

# 当本地已经有了代码仓库,现在需要同步远程仓库内容
[root@m01 ~/test]# git pull origin master
The authenticity of host 'gitee.com (212.64.62.183)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
ECDSA key fingerprint is MD5:27:e5:d3:f7:2a:9e:eb:6c:93:cd:1f:c1:47:a3:54:b1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitee.com,212.64.62.183' (ECDSA) to the list of known hosts.
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), done.
From gitee.com:jhno1/oldboy-jenkins

4.Git本地文件推送到远程仓库

1)查看工作区、暂存区的状态

#1.查看工作区、暂存区的状态
[root@m01 ~/test]# git status  
# On branch master
# Untracked files:
    (use "git add <file>..." to include in what will be committed)
#
#	oldboy-jenkins/
nothing added to commit but untracked files present (use "git add" to track)

2)将工作区的“新建/修改”添加到暂存区

#1.创建新文件
[root@m01 ~/test]# cd oldboy-jenkins/
[root@m01 ~/test/oldboy-jenkins]# vim 1.txt
<h1> 你是</h1>                                                                               
"1.txt" [New] 1L, 17C written                                     

#2.将文件添加到暂存区
[root@m01 ~/test/oldboy-jenkins]# git add 1.txt
[root@m01 ~/test/oldboy-jenkins]# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	new file:   1.txt

3)将暂存区的内容提交到本地库

#1.提交更改,添加备注信息(此时将暂存区的信息提交到本地仓库)
[root@m01 ~/test/oldboy-jenkins]# git commit  -m "zhehsi。。。"
[master 729e679] zhehsi。。。
 1 file changed, 1 insertion(+)
 create mode 100644 1.txt

4)推送到远程仓库

#1. 将本地仓库的文件push到远程仓库(若 push 不成功,可加 -f 进行强推操作)
[root@m01 ~/test/oldboy-jenkins]# git push  origin  master 
Username for 'https://gitee.com': jhno1
Password for 'https://jhno1@gitee.com': 
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 320 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/jhno1/oldboy-jenkins.git
   c671512..729e679  master -> master

5.Git查看历史记录

1)查看历史,列出历史提交记录

#1.用于显示仓库中所有 commit 的信息。默认情况下,该命令会显示仓库中每个 commit 的:SHA 作者 日期 消息
[root@m1 ~/test]# git log 

多屏显示控制方式: 
空格向下翻页  b 向上翻页
q 退出

2)查看历史记录的简洁的版本

#1.选项用于更改 git log 显示信息的方式。此命令:
每行显示一个 commit
显示 commit 的 SHA 的前 7 个字符
显示 commit 的消息

[root@m1 ~/test]# git log --oneline 

#2.用 --graph 选项,查看历史中什么时候出现了分支、合并
[root@m1 ~/test]# git log --oneline --graph

#3.查找指定用户的提交日志
[root@m1 ~/test]# git log --author=jin.hui --oneline -5

3)逆向显示所有日志

#1.用 '--reverse'参数来逆向显示所有日志
[root@m1 ~/test]# git log --reverse --oneline

4)指定日期显示日志

#1.指定日期,可以执行几个选项:--since 和 --before,但是你也可以用 --until 和 --after。
例如,如果我要看 Git 项目中三周前且在四月十八日之后的所有提交,我可以执行这个(我还用了 --no-merges 选项以隐藏合并提交)
[root@m1 ~/test]# git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges

5)更改历史信息的显示方式

#1.git log -p(--patch) 用来更改git log 显示信息的方式。此命令会向默认输出中添加以下信息:
显示被修改的文件
显示添加/删除的行所在的位置
显示做出的实际更改
[root@m1 ~/test]# git log -p(--patch)--oneline

6)查看所有分支的所有操作记录

#1.查看所有分支的所有操作记录,(包括已经被删除的 [commit](https://so.csdn.net/so/search?q=commit&spm=1001.2101.3001.7020) 记录和 reset 的操作)
[root@m1 ~/test]# git reflog
HEAD@{移动到当前版本需要多少步}

1.基于索引值操作[推荐]
git reset --hard [局部索引值]
[root@m1 ~/test]# git reset --hard a6ace91

2.使用^符号:只能后退
[root@m1 ~/test]# git reset --hard HEAD^
注:一个^表示后退一步,n 个表示后退 n 步

3.使用~符号:只能后退
[root@m1 ~/test]# git reset --hard HEAD~n
注:表示后退 n 步

6.Git reset命令参数对比

1)--soft参数

1.仅仅在本地库移动 HEAD 指针

image

2)--mixed参数

1.在本地库移动 HEAD 指针
2.重置暂存区

image

3)--hard参数

1.在本地库移动 HEAD 指针
2.重置暂存区
3.重置工作区

7.删除文件并找回

1.前提:删除前,文件存在时的状态提交到了本地库。
2.操作:git reset --hard [指针位置]
删除操作已经提交到本地库:指针位置指向历史记录
删除操作尚未提交到本地库:指针位置使用 HEAD

8.比较文件差异

# 将工作区中的文件和暂存区进行比较
git diff [文件名]
[root@m01 ~/test/oldboy-jenkins]# git diff 1.txt

# 将工作区中的文件和本地库历史记录比较
git diff [本地库中历史版本] [文件名]

# 查看所有变化
[root@m01 ~/test/oldboy-jenkins]# git diff
posted @ 2021-04-20 18:13  年少纵马且长歌  阅读(171)  评论(0编辑  收藏  举报