第一部分: 三大工作區

版本庫中的文件有三種狀態:
----已修改: modified
-----已暫存: staged
-----已提交: commit
1)工作目錄(工作區)
理解:1)該目錄存放開發人員開發的代碼文件
2)該目錄里的代碼文件,可以進行版本控制
3)該目錄下有一個隱藏文件.git
2)暫存區
理解:
1)理解為一個虛擬工作區,這個虛擬工作區會跟蹤工作區的文件變化
2)存儲一個tree對象的所有信息的二進制文件,分別指向不同的blob、tree對象
3)我們修改的實際內容并沒有保存到暫存區,在暫存區存放的是文件索引,該文件索引建立文件和版本庫中對象之間的關聯
3)版本庫
理解:
工作目錄下的.git文件夾就是版本庫
版本庫里的文件描述:

$ cat HEAD
ref: refs/heads/new
HEAD表示:指向當前分支最新一次提交
注意事項:
1)千萬不要刪除或更改版本庫(.git)目錄下的所有文件
2)新創建的文件,第一次沒有被版本庫追蹤,使用gti status查看狀態,會顯示《untracked》
3)可以通過git add 命令把工作區里的文件,添加到暫存區
4)可以通過git commit命令把暫存區里文件,提交到當前版本庫
可以簡單理解為,將需要提交到版本庫的的所有文件變更通通放到 暫存區,然后,一次性提交 暫存區 中的所有修改。
演示1:

演示2:

第二部分: 四個對象 (文件在git版本庫里是如何存放的)
1、git 對象模型
1)git的每個對象在git版本里,用40個字符串來表示對象名,
2)字符串由對象內容做sha哈希計算得到
3)通過比較SHA的值確定兩個文件內容是否發生改變
2、不同類型的對象用途
A:blob 存儲文件數據,通常是一個文件
理解:
1)工作區里的每個文件,提交到版本庫,是以二進制的形式存儲的
2)blob對象,通過表示的是單個文件
3)通過git show SHA1查看blob里的內容
B:tree:存放一個目錄,通過用來管理tree和blob(因為在一個目錄里可以新建目錄和文件)
理解:
1)tree對象像一個目錄,用來管理“tree”和“blob”對象
2)一般用來表示內容之間的目錄層次關系
C: commit: 指向一個tree,標記項某個特定時間點的狀態,每執行一次git commit命令,就會生成一個commit對象
理解:
1)“commit”對象指向一個“tree對象”
2)標記項目某一個特定時間點的狀態。它包括一些關于時間點的元數據,如時間戳、最近一次提交的作者、
3)有指向上次提交的指針,方便版本回退
D: tag: 用來標記某一個提交(commit)
理解:
1)tag對象也是指向某個特定的commit提交
2)我們一般情況下,會基于最近一次commit提交打一個tag標簽,標志著一個版本發布(里程碑)

演示:

第三部分:二個引用
二個引用:分別為分支、標簽
理解:
1)分支和標簽實際上就是對commit對象提交的引用
2)引用存放路徑: .git/refs
$ ll
total 0
drwxr-xr-x 1 Administrator 197121 0 一月 26 14:00 heads/
drwxr-xr-x 1 Administrator 197121 0 一月 26 11:20 tags/
heads目錄:存放所有分支的指針
tags目錄: 存放所有的標簽
分支使用場景:
1) 比如多人開發一個項目,A程序員開發模塊A,B程序員開發模塊B,這個時候,每個人都會基于當前master分支,創建一個屬于自己的分支出來,每次提交到自己的分支上,一定時期后,合并到master分支
2)比如當版本1.0發布后,然后又要開發一個功能,我們就會創建一個New分支出來。此時過了2天,發現之前的版本1.0有問題,我們最好的建議,回退到版本1.0,然后創建一個分支出來,專門用來修復bug,修復完畢后把這個bug合并到master分支,然后切換到New分支,把master分支上通過git rebase到new分支
標簽(tag)的使用場景:
1)一般用來標記一個里程牌,一個程序版本的發布
2)程序發布的時候,可以基于tag來發布和回退
演示1:

演示2:標簽 (創建一個輕tag)
Administrator@WIN-0JU14CFTKDB MINGW32 /e/project/test01/.git (GIT_DIR!)
$ git tag v1.0 --創建一個版本
Administrator@WIN-0JU14CFTKDB MINGW32 /e/project/test01/.git (GIT_DIR!)
$ cd refs/tags/
Administrator@WIN-0JU14CFTKDB MINGW32 /e/project/test01/.git/refs/tags (GIT_DIR!)
$ ll
total 1
-rw-r--r-- 1 Administrator 197121 41 一月 26 14:48 v1.0
Administrator@WIN-0JU14CFTKDB MINGW32 /e/project/test01/.git/refs/tags (GIT_DIR!)
$ cat v1.0
27ec4bc2d21589316c58dcf2ecc9e30871b9878d
(tag標簽其實也是基于某一次commit提交來創建的)
演示3:

- 第一部分:Git的基本操作
- 第一章:git軟件的安裝
- 第一節:在centos6.8上安裝git-2.3
- 第二節:在windows上安裝git-bash和TortoiseGit軟件
- 第二章: Git的基本概念
- 第一節:git的基本操作
- 第二節:git的深入理解(內部運行機制)
- 第三章:git的文件管理
- 第一節:文件的添加及提交
- 第二節:文件的刪除、回退等
- 第三節:忽略指定格式的文件
- 第四節:撤銷本地倉庫的修改
- 第四章:git的commit對象深入理解
- 第一節:查看提交歷史(git log)
- 第二節:提交查找(git grep)
- 第三節:git版本庫回退
- 第五章: Git分支管理
- 第一節:分支的概念及基本使用
- 第二節:Git分支管理策略
- 第三節:Git分支合并
- 第四節:推送本地分支到遠程分支
- 第七章: Git常用命令詳解
- 第一節:git fetch命令
- 第二節:git pull命令
- 第三節:git push命令
- 第四節: git merge命令
- 第五節:git rebase命令
- 第八章:遠程倉庫管理
- 第二部分: gitlab版本控制系統
- 第一節:"遠程倉庫”版本回退解決方案
- 第二節:遠程分支和本地分支
- 第九章:Git沖突解決
- 第十章:客戶端操作
- 第十章:git常規操作
- 第一章:安裝gitlab服務器
- 第一節:在centos系統上安裝
- 第二章:配置GitLab服務器
- 第一節:關閉gitlab注冊功能
- 第二節:在gitlab上創建項目、組、用戶
- 第三節:漢化gitlab
- 第四節:gitlab配置郵箱通知
- 第五節:gitlab配置https訪問
- 第三章:使用過程常見的故障
- 第三部分: gogs版本控制系統
- 第一章:在centos6上基于二進制包安裝gogs軟件
- 第二章:gogs服務器的配置
- 第一節:gogs服務器上創建項目、用戶
- 第二節:nginx反代gogs,通過https
- 第三節:gogs啟動腳本
- 第四節:git保存密碼到本地
- 第三章:gogs服務器的備份和恢復
- 第一節:gogs備份操作