星期二, 10月 08, 2013

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 ~

沒有留言: