1. 程式人生 > 其它 >Git知識結構和使用

Git知識結構和使用

1.基本概念

01.工作流程
   活躍貢獻者的數量:小型團隊 管理團隊
   提交許可權 提交準則
   工作流程、派生/管理組織  
   瞭解如何維護專案 審計
02.技術概念
  repository   branch 
  track  stage
  init  add  commit  push  pull  clone 

  origin  是當你執行 git clone 時預設的遠端倉庫名字
  master  是當你執行 git init 時預設的起始分支名字
    遠端倉庫 origin 通訊時 master 分支的狀態
03.檔案狀態
 以README為例	
	檔案狀態: 已跟蹤 或 未跟蹤 untracked  和 忽略檔案 .gitignore
		   已跟蹤: 
		      未修改 unmodified,已修改 modified或已放入暫存區  staged
			  	git reset HEAD README.md  # 取消暫存
			    git checkout -- README.md # 撤消之前所做的修改--慎重用
		   .gitignore 的檔案,列出要忽略的檔案的模式
		    git rm --cached README.md # 從已跟蹤檔案清單中移除(確切地說,是從暫存區域移除
		    
			未合併(unmerged)狀態的檔案
			重新命名: git mv

2.Git內部原理

01.Git 的資料結構
    四個資料物件,三個樹物件,三個提交物件和一個標籤物件
	引用型別  HEAD引用 標籤引用 遠端引用(remote reference)
    物件型別(資料物件、樹物件 和 提交物件 ),還有第四種標籤物件(tag object)
	Git 環境變數
    		
02.Git 倉庫中有五個物件:
   Git 的核心部分是一個簡單的鍵值對資料庫(key-value data store)
    三個 blob 物件(儲存著檔案快照)、
    一個 樹   物件(記錄著目錄結構和 blob 物件索引)
    一個 提交 物件(包含著指向前述樹物件的指標和所有提交資訊)
	
	HEAD 上一次提交的快照,下一次提交的父結點 . HEAD 指向當前所在的分支
	Index 預期的下一次提交的快照
	工作目錄   .git 資料夾中所在的目錄
	.git/objects 目錄(即 物件資料庫)
	Git 分支的本質:一個指向某一系列提交之首的指標或引用
03.Git 伺服器 和Git 客戶端
   Git伺服器:git daemon   、  systemctl  status  git-daemon
  git協議: 四種不同的協議來傳輸資料:本地協議(Local),HTTP 協議,SSH(Secure Shell)協議及 Git 協議
   
04. Git 的原始內部資料 檔案系統
   .git/hooks 鉤子都被儲存在 Git 目錄下的 hooks 子目錄中 
              客戶端鉤子分為:提交工作流鉤子、電子郵件工作流鉤子和其它鉤子。
     .
	 config 檔案包含專案特有的配置選項
	 info 目錄包含一個全域性性排除(global exclude)檔案, 用以放置那些不希望被記錄在 .gitignore 檔案中的忽略模式(ignored patterns
	 refs 目錄儲存指向資料(分支、遠端倉庫和標籤等)的提交物件的指標
	 objects 目錄儲存所有資料內
	 HEAD 檔案指向目前被檢出的分支;index 檔案儲存暫存區資訊

3.Git命令

01.幫助
     git  --help
	 git help branch
02..檢視-檢查
     git --version     #檢視版本 
     git status        # 當前做的哪些更新尚未暫存? 有哪些更新已暫存並準備好下次提交?
     git diff          # 檢視尚未暫存的檔案更新了哪些部分
     git diff --staged # 比對已暫存檔案與最後一次提交的檔案差異  git diff --cached 
     git log           # 回顧提交歷史 按時間先後順序列出所有的提交,最近的更新排在最上面
     git config -l  | git config --list 
     git branch -a  | git branch --all 
     git remote -v
     git remote show origin	 
   分支 本地分支  遠端分支 建立分支  切分支  合併分支    刪除分支 
03.整合不同分支
  變基和合並
  Git 中整合來自不同分支的修改主要有兩種方法:merge 以及 rebase
      提交歷史是記錄實際發生過什麼
	  提交歷史是 專案過程中發生的事
    01.合分支最容易的方法是 merge 命令
       git checkout  分支切換
	   git merge    合併分支
       遇到衝突時的分支合併
         git status 命令來檢視那些因包含合併衝突而處於未合併(unmerged)狀態的檔案
       衝突解決方案僅保留了其中一個分支的修改,
         並且 <<<<<<< , ======= , 和 >>>>>>> 這些行被完全刪除了
       對每個檔案使用 git add 命令來將其標記為衝突已解決。 一旦暫存這些原本有衝突的檔案,Git 就會將它們標記為衝突已解決。
      git add
    02.通過合併操作來整合分叉的歷史: rebase 
       命令將提交到某一分支上的所有修改都移至另一分支上
	   管理版本庫,還是幫忙驗證、稽核收到的補丁, git apply 命令要比 patch 
	   patch  format-patch 生成並通過電子郵件傳送過來的補丁
	撤消合併
	   還原提交 git revert
   遠端和本地連線
    Git會自動在本地分支與遠端分支之間,建立一種追蹤關係(tracking)
      001.git pull = 等同於先做git fetch,再做git merge

      002. git push 推送 
      simple方式 :  不帶任何引數的 git push,預設只推送當前分支 
   matching方式 :推送所有有對應的遠端分支的本地分支
      當前分支與多個主機存在追蹤關係,則可以使用 -u 選項指定一個預設主機
   地做git pull合併差異,然後再推送到遠端主機
   –force 選項,結果導致遠端主機上更新的版本被覆蓋

  04.搜尋
  Git 提供了兩個有用的工具來快速地從它的資料庫中瀏覽程式碼和提交
   git grep 會查詢你工作目錄的檔案
   git log 命令有許多強大的工具可以通過提交資訊甚至是 diff 的內容來找到某個特定的提交
   bisect 命令  
05.其他
    git tag 
       Git 支援兩種標籤:輕量標籤(lightweight)與附註標籤(annotated)
    git describe
    釋出:  git archive
    git reflog 來檢視引用日誌 記錄了最近幾個月你的 HEAD 和分支引用所指向的歷史
    Git 託管服務: gitLab  GitHub  gitee

4.Git資料結構

	 config 檔案包含專案特有的配置選項
	 info 目錄包含一個全域性性排除(global exclude)檔案, 用以放置那些不希望被記錄在 .gitignore 檔案中的忽略模式(ignored patterns
	 refs 目錄儲存指向資料(分支、遠端倉庫和標籤等)的提交物件的指標
	 objects 目錄儲存所有資料內
	 HEAD 檔案指向目前被檢出的分支;index 檔案儲存暫存區資訊
     ├── branches
     ├── config
     ├── HEAD
     ├── index
     ├── info
     │   └── exclude
     ├── objects
     │   ├── 00
     │   │   ├── ad0d06ea08f5bfc2716c31006889b19f402b0c
     │   │   └── *******************************fdb2c
     │   ├── info
     │   └── pack
     │       ├── pack-bc0ab38dfd8e51db7f0612a9cc02ceb731f5be97.idx
     │       └── pack-bc0ab38dfd8e51db7f0612a9cc02ceb731f5be97.pack
     │└── refs
     │    ├── heads
     │    │   ├── dev
     │    │   └── master
     │    ├── remotes
     │    │   └── origin
     │    │       ├── dev
     │    │       ├── HEAD
     │    │       └── master
     │    └── tags
     ├── ORIG_HEAD
     ├── packed-refs
     ├── logs
     │   ├── HEAD
     │   └── refs
     │       ├── heads
     │       │   ├── dev
     │       │   └── master
     │       └── remotes
     │           └── origin
     │               ├── dev
     │               ├── HEAD
     │               └── master	
     ├── hooks
     │   ├── applypatch-msg.sample
     │   ├── commit-msg.sample
     │   ├── post-update.sample
     │   ├── pre-applypatch.sample
     │   ├── pre-commit.sample
     │   ├── prepare-commit-msg.sample
     │   ├── pre-push.sample
     │   ├── pre-rebase.sample
     │   └── update.sample	
     ├── description
     ├── FETCH_HEAD  
     ├── COMMIT_EDITMSG		

參考

https://git-scm.com/book/zh/v2