本篇博客部分來自pro git 和廖雪峰的gitl教程
版本控制
-
本控制系統(tǒng)(VCS version control system)
是一種記錄一個或若干文件內(nèi)容變化秧饮,
以便將來查閱特定版本修訂情況的系統(tǒng)狭握。 在本書所展示的例子中磺箕,我們對保存著軟件源代碼
的文件作版本控制锡溯,但實際上届垫,你可以對任何類型的文件進行版本控制惭载。 . 本地版本控制
其中最流行的一種叫做 RCS洽蛀,現(xiàn)今許多計算機系統(tǒng)上都還看得到它的蹤影心例。 甚至在流行的
Mac OS X 系統(tǒng)上安裝了開發(fā)者工具包之后演顾,也可以使用 rcs 命令供搀。 它的工作原理是在硬盤
上保存補丁集(補丁是指文件修訂前后的變化);通過應(yīng)用所有的補丁钠至,可以重新計算出各
個版本的文件內(nèi)容葛虐。
- 集中化的版本控制系統(tǒng)
為協(xié)同工作開發(fā)的版本
控制系統(tǒng)統(tǒng)(Centralized Version Control Systems,簡稱 CVCS)應(yīng)運而生棉钧。 這類系統(tǒng)屿脐,諸如
CVS、Subversion 以及 Perforce 等,都有一個單一的集中管理的服務(wù)器的诵,保存所有文件的修
訂版本万栅,而協(xié)同工作的人們都通過客戶端連到這臺服務(wù)器,取出最新的文件或者提交更新西疤。
多年以來烦粒,這已成為版本控制系統(tǒng)的標準做法。 - 缺點:代赁。 這么做最顯而易見的缺點是中央服務(wù)器的單點故障扰她。。 如果宕機一小
時芭碍,那么在這一小時內(nèi)徒役,誰都無法提交更新,也就無法協(xié)同工作窖壕。 如果中心數(shù)據(jù)庫所在的磁
盤發(fā)生損壞忧勿,又沒有做恰當備份,毫無疑問你將丟失所有數(shù)據(jù)——包括項目的整個變更歷
史艇拍,只剩下人們在各自機器上保留的單獨快照狐蜕。
分布式版本控制系統(tǒng)
于是分布式版本控制系統(tǒng)(Distributed Version Control System,簡稱 DVCS) 卸夕。 在這
類系統(tǒng)中层释,像 Git、Mercurial快集、Bazaar 以及 Darcs 等贡羔,客戶端并不只提取最新版本的文件快
照,而是把代碼倉庫完整地鏡像下來个初。 這么一來乖寒,任何一處協(xié)同工作用的服務(wù)器發(fā)生故障,
事后都可以用任何一個鏡像出來的本地倉庫恢復院溺。 因為每一次的克隆操作楣嘁,實際上都是一次
對代碼倉庫的完整備份。 因為每一次的克隆操作珍逸,實際上都是一次
對代碼倉庫的完整備份逐虚。
Git 簡史
同生活中的許多偉大事物一樣,Git 誕生于一個極富紛爭大舉創(chuàng)新的年代谆膳。
Linux 內(nèi)核開源項目有著為數(shù)眾廣的參與者叭爱。 絕大多數(shù)的 Linux 內(nèi)核維護工作都花在了提交補
丁和保存歸檔的繁瑣事務(wù)上(1991-2002年間)。 到 2002 年漱病,整個項目組開始啟用一個專
有的分布式版本控制系統(tǒng) BitKeeper 來管理和維護代碼买雾。
到了 2005 年把曼,開發(fā) BitKeeper 的商業(yè)公司同 Linux 內(nèi)核開源社區(qū)的合作關(guān)系結(jié)束,他們收回
了 Linux 內(nèi)核社區(qū)免費使用 BitKeeper 的權(quán)力漓穿。 這就迫使 Linux 開源社區(qū)(特別是 Linux 的
締造者 Linus Torvalds)基于使用 BitKcheper 時的經(jīng)驗教訓嗤军,開發(fā)出自己的版本系統(tǒng)。 他們
對新的系統(tǒng)制訂了若干目標:
速度
簡單的設(shè)計
對非線性開發(fā)模式的強力支持(允許成千上萬個并行開發(fā)的分支)
完全分布式
有能力高效管理類似 Linux 內(nèi)核一樣的超大規(guī)模項目(速度和數(shù)據(jù)量)
Git 基礎(chǔ)
- 直接記錄快照器净,而非差異比較
- 近乎所有操作都是本地執(zhí)行
- Git 保證完整性
Git 中所有數(shù)據(jù)在存儲前都計算校驗和型雳,然后以校驗和來引用。 這意味著不可能在 Git 不知情
時更改任何文件內(nèi)容或目錄內(nèi)容山害。 - Git 一般只添加數(shù)據(jù)
三種狀態(tài)
- 已提交(committed)
數(shù)據(jù)已經(jīng)安全的保存在本地數(shù)據(jù)庫中纠俭。 - 已修改(modified)
已修改表示修改了文件,但
還沒保存到數(shù)據(jù)庫中浪慌。 - 已暫存(staged)
已暫存表示對一個已修改文件的當前版本做了標記冤荆,使之包含在下次
提交的快照中。
由此引入 Git 項目的三個工作區(qū)域的概念:Git 倉庫权纤、工作目錄以及暫存區(qū)域钓简。
Git 工作流程:
- 在工作目錄中修改文件。
- 暫存文件汹想,將文件的快照放入暫存區(qū)域外邓。
- 提交更新,找到暫存區(qū)域的文件古掏,將快照永久性存儲到 Git 倉庫目錄损话。
記錄每次更新到倉庫
工作目錄下的每一個文件都不外乎這兩種狀態(tài):已跟蹤或未跟蹤。 已跟蹤的文件
是指那些被納入了版本控制的文件槽唾,在上一次快照中有它們的記錄丧枪,在工作一段時間后,它
們的狀態(tài)可能處于未修改庞萍,已修改或已放入暫存區(qū)拧烦。 工作目錄中除已跟蹤文件以外的所有其
它文件都屬于未跟蹤文件,它們既不存在于上次快照的記錄中钝计,也沒有放入暫存區(qū)恋博。 初次克
隆某個倉庫的時候,工作目錄中的所有文件都屬于已跟蹤文件私恬,并處于未修改狀態(tài)交播。
- 關(guān)于git的基本操作
git基礎(chǔ)指令