前言
過去曾經詢問過資訊界前輩版本控制相關概念與基本操作,但自己實際建立和執行一個專案的過程中,發現不熟悉版控所導致的可怕後果,不僅版本線混亂,版本衝突時還選錯版本,下場淒慘。所以對於重要的Git不能只是略懂略懂,於是決定再來系統性地了解它!來吧!我要補交作業了……(該還的債還是要還) QAQ
主要內容
- Git 是什麼?為何要版本控制?
- 什麼是 Repository? Clone? Push? Pull? Fetch? Commit?
- 使用 SourceTree 管理 Git
- 合併修改記錄與解決衝突
(參考教學文:連猴子都能懂的Git入門指南)
Git 是什麼?為何要版本控制?
想把檔案恢復到編輯前的狀態,你會怎麼做呢?
當多人同時編輯檔案時,先編輯者的修改內容會被覆蓋。
Git 可以解決這樣的問題。Git 為分散式版本控制系統,是為了更好管理 Linux 內核而開發的,能保存更新歷史記錄,可顯示編輯前後內容差異,可復原指定版本,並進行衝突管理。
什麼是 Repository? Clone? Push? Pull? Fetch? Commit?
在管理 Git 前,有幾個常用的名詞概念需要先了解,簡介如下:
Repository:簡稱 Repo ,一般被譯為專案的倉庫或倉儲,能記錄檔案或目錄的狀態。分為遠端 Repo(下簡稱遠端)與本地 Repo(下簡稱本地)。
遠端:多人共享,有專用 Server。
本地:用戶個人使用,比如在自己的電腦上配置的專案倉庫(資料夾)。Clone:複製遠端他人或自己的專案到本地。
Push:本地上傳到遠端。
Pull:遠端下載到本地。( pull = fetch + merge )
Fetch:只取得遠端最新記錄,沒合併。
Commit:檔案或目錄變更、新增後,提交(Commit)以儲存到 Repository 中。在 Repository 產生上次與本次狀態差異記錄(Revision)。一般在 Commit 時可敘明以下 2 點,以方便未來能迅速找到想復原的指定版本:
1. 修改內容的摘要
2. 修改理由
使用 SourceTree 管理 Git
Mac 可以安裝 SourceTree(一款 git 的免費 GUI 管理軟體)。
一般都會為遠端 Repository 命名為 origin。所以在 SourceTree 中可以看到下列標籤,在此簡述他們的意涵:
- origin/master:表示遠端「origin」的「master」分支位置。
- origin/HEAD:表示遠端「origin」當前提交位置。通常和「origin/master」位置同。
- master:表示本地「master」分支位置。
當「master」 與「origin/master」在同ㄧ層位置,表示遠端與本地已同步。
工作目錄與索引
管理 Git 時,不是將工作目錄(我的理解是指本地端該專案資料夾)中的所有檔案都提交,而是可以透過索引排除工作目錄裡不必要的或含有帳密個資的檔案(還可以只選變更內容的部分)提交。以下示意圖舉例:(圖片引用自連猴子都能懂的Git入門指南)
合併修改記錄與解決衝突
當多人協作一個專案時易發生以下情況,自己上次的 push 到下一次 push 期間,若他人已 push 更新遠端,而自己尚未更新本地,則自己的 push 會被拒絕。解決方法是先合併(merge)導入他人修改史,自己再 push 。以下示意圖舉例:(圖片引用自連猴子都能懂的Git入門指南)
Git 執行合併會自動合併修改的部分,但有時需手動修改,如下方示意圖舉例:(圖片引用自連猴子都能懂的Git入門指南)
用==分隔的上方是本地編輯內容,下方是遠端的,需手動修改衝突。
修改衝突,刪除多餘的標示行。
以上是學習的一點紀錄,若想了解 Git 更詳細的內容,可以去看上面連結的教學文喔!