Working with Git | Git 與 GitHub
關於
各位好,這裡是 Chinas Prices Project 項目的知乎專欄。關於 CPP 項目,您可以在這篇文章里了解到更多的信息。若您對這個項目感興趣,我們非常歡迎您與我們交流您的想法與見解。
在一個團隊的成員同時為一個項目進行開發工作時,為了對整個項目涉及到的代碼進行統一的管理,方便文件存取、協同開發、狀態回滾、歷史版本記錄等操作的進行,版本控制系統(Version Control System) 應運而生,諸如 VSS、CVS、SVN、Git 等都是 VCS 的典型代表。而當下最為流行並得到廣泛應用的版本控制系統,正是 Git 。
「Working with Git」系列文章將向各位粗淺介紹 Git 與 GitHub 的有關概念與實際應用。文章將以介紹基於 Git 的版本管理思想與 GitHub 的有關功能為主,重點不會放在 Git 的命令行代碼上。因個人的水平能力與經驗都非常有限,若有錯漏還望批評指正。
Git 與 GitHub 中的基本概念
前面提到,Git 是一個免費、開源、分散式的對項目代碼的提供版本管理功能的軟體,而 GitHub 則是一個基於 Git 提供代碼託管服務的網路平台。
Git 的分散式體現在其「去中心化」的特點。以往,SVN 之類的版本控制系統存在一個「中心伺服器」,其使用者需要從伺服器「取回」一個代碼的最新版本,在完成自己的修改後再「提交」到中心伺服器上讓自己的代碼成為新的版本,這種結構有一些明顯的缺點:一是要求使用者在獲取代碼與提交更改時必須連接到伺服器;二是當使用者人數過多時伺服器壓力會明顯變大,在處理衝突時(例如幾位使用者對一段代碼的同一個地方做了不同的更改)也會出現很大困難。
為解決這些問題,Git 中引入了新的代碼管理機制。我們先來了解 Git 中的基本概念與操作:
Repository (倉庫): 一個項目的所有代碼存放在同一個倉庫 (Repo) 中。倉庫有本地倉庫 (Local) 與遠程倉庫 (Remote) 的區別。如果你使用 GitHub ,那麼你的遠程倉庫便託管在 GitHub 上。
Commit (提交): 當你在本地庫完成了一些修改後,將所有修改內容提交到緩存區。你可以為每個 Commit 加上一個標題並寫明這次修改的主要內容。
Push (推送): 當本地倉庫緩衝區有未同步的 Commit 時,即本地倉庫代碼版本新於遠程倉庫,Push可以將這些 Commit 推送到遠程倉庫。Pull/Fetch (拉取): 當遠程倉庫代碼版本新於本地倉庫時,Pull/Fetch 操作可以使本地倉庫更新到遠程倉庫的版本。兩者間的區別我們會在下一篇文章中介紹。Sync (同步): 同步遠程倉庫版本與本地倉庫版本。Fork/Clone/Publish (複製/克隆/發布): Fork 操作將一個他人的遠程倉庫複製到自己的遠程倉庫中; Clone 操作將一個他人的遠程倉庫複製到自己的本地倉庫中;Publish 操作將自己的本地倉庫發布到 GitHub 等代碼託管平台上,即在託管平台上建立起一個對應的遠程倉庫。通過這些概念,我們不難發現 Git 中不存在類似 SVN 之類的「中心伺服器」,每位用戶都可以通過 Fork/Clone 操作獲得一個可以自行更改的代碼倉庫,這在一定程度上解決了集中式代碼管理帶來的問題。然而真正凸顯 Git 強大功能的,是 Git 中「工作流」的有關概念。
我們將在下篇文章中具體討論工作流的有關內容。
成稿匆忙,且當拋磚引玉,多有感謝~XD
=========================
更多項目介紹,請關注我們的項目專欄:Chinas Prices Project - 知乎專欄
項目聯繫方式:
- 項目郵箱:zhangguocpp@163.com
- 知乎:@iGuo@Suri(項目負責人) @林行健@Dementia (技術負責人)@張土不 (財務負責人) @好大一棵樹(運維負責人)
文章中圖片來源於:Getting Git Right - Atlassian Git Tutorial
在 Creative Commons Attribution 2.5 Australia License 下使用。本作品採用知識共享署名-非商業性使用-相同方式共享 3.0 中國大陸許可協議進行許可。推薦閱讀:
※git 中如何撤銷部分修改?
※Git如何在本地查看遠端倉庫超前本地提交的日誌信息?僅僅是日誌信息哦
※為什麼git默認不區分文件夾大小寫?
※gg———good use of git,一個實用的git分支模型