2013IT鐵人賽-23-git05-git基本概念
在上一篇文章 2013IT鐵人賽-16-git04-git基礎練習git pull 與第2裝置使用 我們練習了第2個裝置使用 git 還有利用 git pull 方式將遠端的 repo 同步到本機, 今天我們則是要整理一下 git 的基本概念.
容器 Repositories
- 不同於其他版本控制系統, git 提供所有容器內檔案的完整拷貝,也提供容器本身的完整拷貝.
- 配置設定不會經由拷貝或是複製等傳遞出去
- 以每個站, 每個使用者, 每個容器為基礎,管理配置檔案及資訊
- 主要資料結構存放於根目錄中的 .git 目錄
- 物件儲存
- 執行複製時能夠有效的拷貝
- 4種形態
- Blobs(Binary large object)
- 檔案的每個版本都是由Blob所組成
- 通常指某些可以儲存任何資料的檔案或是變數
- 樹(Tree)
- 代表一個階層的目錄資訊
- 紀錄Blob的辨識碼, 路徑名稱, 以及所有檔案的一些資訊
- 送交(Commits)
- 每次容器更動時的所有資訊
- 每次的送交都會指向一個樹狀的物件
- 標籤(Tags)
- 將一個人類易讀的名字賦予特定的物件
- 例如對人類來說送交
- 92641d935daa77942197f149e6babf1d507cb801
- 應該沒有比
- Ver-1.0
- 來的好
- 2種形態
- 輕量標籤(lightweight)
- 不會儲存永久物件, 參照到一個送交物件
- 通常是容器私有的
- 標示標籤(annotated)
- 會真實的建立一個永久物件
- 許多git指令只能使用標示標籤, 因為只有標示標籤才是永久的物件
- 索引(index)
- 暫時的資訊, 僅供容器使用
- 動態且暫時的二進位檔案
- 描述整個容器的目錄結構
- .git 目錄
- .git/objects目錄
- 物件存放於此目錄, 並使用SHA1來進行雜湊
- 如果有一個檔案內容是 hello world
- SHA1 的雜湊值就是 3b18e512dba79e4c8300dd08aeb37f8e728b8dad
- git 會用前兩碼 (3b)來當作區隔的目錄
- .git/index 檔案
- 存放索引
- 追蹤檔案的路徑以及存放的內容
Git 追蹤內容
- Git 的物件儲存是基於物件內容的雜湊演算值 (使用SHA1)
- git 根本不追蹤檔案或是目錄名稱
- git 追蹤的是內容而不是檔案
- 如果兩個不同目錄的不同檔案擁有相同的內容
- git 將只會使用 blobs儲存一份內容的拷貝
- git 儲存每個檔案的每個版本,不只是差異, 而是每個修訂版本及下個檔案都儲存
- git 藉由樹狀物件追蹤檔案的路徑名稱
物件儲存的圖示
- blobs
- 在資料結構的最下方,沒有任何的參照, 僅被樹狀物件參照
- 以方形表示
- 樹狀(Tree)
- 指向 blobs 物件或是其他樹狀物件
- 可能會被不同的送交物件指向
- 以三角形表示
- 送交(Commits)
- 一個送交指向一個特定的樹狀物件
- 代表該樹是由該送交放入容器的
- 以圓形表示
- 標籤(Tags)
- 每個標籤只能指向一個送交
- 以菱形表示
- 分支(branch name)
- 非git 基礎物件, 但是在命名送交扮演重要的角色
- 以圓角長方形表示
Fun with Day 23 ~
沒有留言:
張貼留言