2013IT鐵人賽-23-git05-git基本概念
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 ~