深入探究GIT原理

1、版本管理的演变

VCS出现之前

  1. 用目录拷贝区别不同版本
  2. 公共文件容易被覆盖
  3. 成员沟通成本高,代码集成效率低下
    人工约定版本控制

VCS集中式版本管理系统

  1. 有集中的版本管理服务器
  2. 具备文件版本管理和分支管理能力
  3. 集成效率有明显的提高
  4. 客户端必须时刻连接服务器
    集中式版本控制

VCS分布式版本管理系统

  1. 服务端和客户端都有完整的版本库
  2. 脱离服务端、客户端照样可以管理版本
  3. 查看历史和版本比较等多数操作都不需要访问服务器,比集中式VCS更能提高版本管理效率
    在这里插入图片描述

2、GIT的特点

  1. 最优的存储能力、非凡的性能、开源的、很容易做备份、支持离线操作、很容易制定工作流程
  2. 系列产品git、github、gitlab
  3. https://git-scm.com/downloads

git的使用

下载安装

https://git-scm.com/downloads

git --version

配置

git config --global user.name 'your_name'
git config --global user.email 'your_email@domain.com'

config 的三个作用域

git config --local  ##缺省等同与local,只对某个仓库有效
git config --global ##对当前用户所有仓库有效
git config --system ##对系统所有登录用户有效

查看config的配置,加–list

git config --list
git config --list --local
git config --list --global
git config --list --system

建GIT仓库

  1. 把已有项目纳入到GIT管理
cd 项目代码所在路径
git init
  1. 新建项目直接使用git管理
$ git init your_project #会在当前路径下创建和项目名称同名的文件夹
$ cd your_project
$ touch readme.MD


$ git commit -m "add readme"
## 会给出提示信息
On branch master

Initial commit

Untracked files:
	readme.MD

nothing added to commit but untracked files present   ##暂存区没有暂存文件,列出没有被管理的文件

$ git add readme.MD  #将readme文件加入暂存区
$ git status #查看暂存区状态
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   readme.MD						#有新修改的文件提交到暂存区了

(base)

$ git commit -m "add readme"
[master (root-commit) 35185ab] add readme				#master分支加入了readme文件,1文件个提交,0行代码加入,0行代码删除
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 readme.MD
(base)

$ git log  #查看历史提交记录
commit 35185ab774e47269730759ef6d721972f6676d98 (HEAD -> master)  #commit 的id
Author: llvvlv00 <llvvlv00@qq.com>		#作者
Date:   Wed May 31 23:31:58 2023 +0800

    add readme
(END)

往仓库里添加文件

文件重命名在git里的简便方法

$ git mv readme readme.md

$ git status	#可以看到git识别到了文件重命名
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	renamed:    readme -> readme.md				

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	.history/

(base)

$ git log  #查看历史

git log 查看版本历史

$ git log --oneline #简洁的查看版本历史
06ae45d (HEAD -> master) Move readme to readme.md
1525d12 rename files
23e9483 Add refering projects
c2d5ebf add js
50e6f27 add styles
35185ab add readme

$ git log -n4 --oneline #简洁的查看最近4次的版本历史

$ git log -n2 #查看最近2次的历史版本
commit 06ae45dfe11631a3aa073588815fd895fe89c8fc (HEAD -> master)
Author: llvvlv00 <llvvlv00@qq.com>
Date:   Thu Jun 1 03:52:42 2023 +0800

    Move readme to readme.md

commit 1525d127cfaa39ad0ab089389c6bcad3cbd6ea0c
Author: llvvlv00 <llvvlv00@qq.com>
Date:   Thu Jun 1 03:46:34 2023 +0800

    rename files
    
$ git branch -v #查看所有分支
$ git checkout -b temp 23e9483 #指定版本创建分支

修改readme文件
$ git add readme
$ git commit -m"Add test"

$ git branch -av #查看所有分支
$ git log #查看到当前分支是temp
$ git log --all #查看所有分支版本信息
$ git log --all --graph #查看图形化的历史版本演进
* commit a81085d6870a7d5a8dc3414b78e656d2fe7ee467 (HEAD -> temp)
| Author: llvvlv00 <llvvlv00@qq.com>
| Date:   Thu Jun 1 04:02:32 2023 +0800
|
|     Add test
|
| * commit 06ae45dfe11631a3aa073588815fd895fe89c8fc (master)
| | Author: llvvlv00 <llvvlv00@qq.com>
| | Date:   Thu Jun 1 03:52:42 2023 +0800
| |
| |     Move readme to readme.md
| |
| * commit 1525d127cfaa39ad0ab089389c6bcad3cbd6ea0c
|/  Author: llvvlv00 <llvvlv00@qq.com>
|   Date:   Thu Jun 1 03:46:34 2023 +0800
|
|       rename files
|
* commit 23e94839af2a35b235ec50306b47d0d9034ce8ba
| Author: llvvlv00 <llvvlv00@qq.com>
| Date:   Thu Jun 1 03:37:56 2023 +0800
|
|     Add refering projects
|
* commit c2d5ebf3bc09773e7167013780e1903b66adf50d
| Author: llvvlv00 <llvvlv00@qq.com>
| Date:   Thu Jun 1 03:35:17 2023 +0800
|
|     add js
|
* commit 50e6f274713dbe36e49baa6a5c6a361979ab187f
| Author: llvvlv00 <llvvlv00@qq.com>
| Date:   Thu Jun 1 03:33:26 2023 +0800
|
|     add styles
|
* commit 35185ab774e47269730759ef6d721972f6676d98
  Author: llvvlv00 <llvvlv00@qq.com>
  Date:   Wed May 31 23:31:58 2023 +0800

      add readme
$ git log --oneline --all -n4 --graph  #简洁的查看最近4次的图形化的版本历史

$ git help --web log #web方式查看log命令的帮助参数

gitk 图形化看版本历史

$ gitk

View上可以定制化查看版本演进历史

3、git原理探究

1、深入到.git里面

$ cd .git
$ ll
total 48
-rw-r--r--   1 llvvlv00  staff     9B  6  1 04:02 COMMIT_EDITMSG
-rw-r--r--   1 llvvlv00  staff    21B  6  1 04:00 HEAD
-rw-r--r--   1 llvvlv00  staff    41B  6  1 03:47 ORIG_HEAD
-rw-r--r--   1 llvvlv00  staff   186B  5 31 23:23 config
-rw-r--r--   1 llvvlv00  staff    73B  5 31 23:22 description
drwxr-xr-x  14 llvvlv00  staff   448B  5 31 23:22 hooks
-rw-r--r--   1 llvvlv00  staff   626B  6  1 04:02 index
drwxr-xr-x   3 llvvlv00  staff    96B  5 31 23:22 info
drwxr-xr-x   4 llvvlv00  staff   128B  5 31 23:31 logs
drwxr-xr-x  30 llvvlv00  staff   960B  6  1 04:02 objects
drwxr-xr-x   4 llvvlv00  staff   128B  5 31 23:22 refs

$ cat HEAD #记录了当前工作环境的分支指向,如果切换到master分支,这里的内容也会改变
ref: refs/heads/temp

$ cat config #这里是当前项目的git配置信息,修改这里和执行 git config --local 是一样的
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
	ignorecase = true
	precomposeunicode = true
[user]
	name = llvvlv00
	email = llvvlv00@qq.com
	
$ cd refs && ll
drwxr-xr-x  4 llvvlv00  staff   128B  6  1 04:02 heads   #这里存放的是版本分支, 独立的开发空间
drwxr-xr-x  2 llvvlv00  staff    64B  5 31 23:22 tags		 #这里是打包标签,也叫里程碑。项目进展到一定程度,可以打包标签

$ cd heads && ll
$ cat temp
a81085d6870a7d5a8dc3414b78e656d2fe7ee467	##存放的是版本hash值,指的是temp指向 a81085d687 这个版本

$ git cat-file -t a81085d6870a7d5a8dc3414b78e656d2fe7ee467 #查看hash值的类型,它是一个commit
commit
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值