---
# System prepended metadata

title: 'Learn: Git'

---

# Learn: Git 

版本控制系統 ( Version Control System, 簡稱 VCS )，讓人們可以與其他開發者同公開發一個專案同時避免了不必要的重複與衝突。

---
## Git 重要的設計

* 強力支援非線性開發模式 (分散式開發模式)
  - Git 擁有快速的分支與合併機制，還包括圖形化的工具顯示版本變更的歷史路徑。
  - Git 非常強調分支與合併，所以版本控管的過程中，你會不斷的在執行分支與合併動作。
  - Git 的分支機制非常輕量，沒有負擔，每一次的分支只是某個 commit 的參考指標而已。

* 分散式開發模型
  - 參與 Git 開發的每個人，都將擁有完整的開發歷史紀錄。
  - 當開發人員第一次將 Git 版本庫複製(clone)下來後，完全等同於這份 Git 版本庫的「完整備份」。
  - 整個版本庫中所有變更過的檔案與歷史紀錄，通通都會儲存在本機儲存庫(local repository)。
>這意味著包含程式碼庫的儲存庫的完整副本是在開法者們電腦上創建的。自己可以對自己的副本進行更改，然後再將更改推送回伺服器，*管理員能決定是否將您的更改與主副本合併到主幹上*。

* 相容於現有作業系統
  - Git 版本庫其實就只是一個資料夾而已，資料夾中有許多相關的設定檔與各種 blob 物件檔案而已。
  - Git 版本庫可以用任何方式發布，所以你用 HTTP, FTP, rsync, SSH 甚至於用 Git protocol 都可以當成存取 Git 版本庫的媒介，相容性極高。

* 有效率的處理大型專案
  - 由於完整的版本庫會複製(clone)一份在本機，該版本庫包含完整的檔案與版本變更紀錄，所以針對版本控管中的各種檔案操作速度，將會比直接從遠端存取來的快上百倍之多。
  - 這也代表著，Git 版本控管不會因為專案越來越大、檔案越來越多，而導致速度變慢。

* 歷史紀錄保護
  - Git 版控的過程，每次 commit 都會產生一組 hash id 編號，而且每個版本在變化的過程都會參考到這個 hash id，只要 hash id 無法比對的上，Git 就會無法運作，所以當專案越來越大，版本庫複製(clone)的越來越多份，你幾乎無法竄改檔案的內容或版本紀錄。
  - **請記得: 每個人都有一份完整的版本庫，你改了原始的那份，所有人的版本庫就無法再合併回原本的版本庫了，所以你幾乎不可能任意竄改版本紀錄。**
