Linux項目開始後,絕大多數的Linux內核維護工做都花在了提交補丁和保存歸檔的繁雜事物上(1991——2002年間)。到2002年,整個項目組開始啓用分佈式版本控制系統BitKeeper來管理和維護代碼。到2005年的時候,開發BitKeeper的商業公司同Linux內核開發社區的合做關係結束,他們收回了無償使用BitKeeper的權力。這就使得Linux開源社區不得不開發了本身的版本控制軟件Git。linux
其餘系統在每一個版本中記錄着各個文件的具體差別git
Git保存每次更新的文件快照github
這是Git與其餘版本控制系統的主要差異,其餘版本控制系統節省了磁盤空間,但增長了計算量;Git是都保存了,由於磁盤原來越便宜。算法
在保存到Git以前,全部數據都要進行內容的校驗和(checksum)計算,並將此結果做爲數據的惟一標識和索引。Git使用SHA-1算法計算數據的校驗和,經過對文件的內容或目錄的結構計算出一個SHA-1哈希值,做爲指紋字符串。該字符由40個十六個進制字符(0-9及a-f)組成,看起來就像是:數據庫
首先安裝git,我是在ubuntu下,因此輸入命令:ubuntu
$sudo apt-get install git-corevim
OK!此時應該git成功安裝,查看git版本:安全
$git --version分佈式
一:獲取項目的git倉庫:this
1)從當前目錄初始化:
$git init
建立了一個空的git倉庫:
若是這個git倉庫已經初始化過了,則提示exist:
若是成功建立一個空的git倉庫能夠看到在當前目錄下出現一個.git目錄,這個就是倉庫了!
如今偷窺一下.git目錄下都有什麼:
2)從現有倉庫克隆:
克隆倉庫的命令爲git clone [url]。好比,要克隆Ruby語言的Git代碼倉庫Grit,能夠用下面的命令:
$git clone git://github.com/schacon/grit.git
這時在當前目錄下建立一個名爲「grit」的目錄,其中內含一個.git目錄,並從同步後的倉庫中拉出全部的數據,取出最新版本的文件拷貝。若是想本身指定目錄的名字:
$git clone git://github.com/schacon/grit.git mygrit
得到Linux2.6內核源碼:
若是使用git clone --bared則會只clone .git倉庫,而不會clone working directory和staging area。下面是對比,linux-kernel是使用git clone獲得的,my-linux是使用git clone --bared獲得的
二:新加文件到index中,使得git能夠跟蹤它:
git有3個區域,分別是:
任何一個git裏的文件都有三種狀態:
說明沒有跟蹤任何文件
用vim修改一下工做目錄下的main.c文件,再將文件git add到staging area,而後:
$git add .
git add+要跟蹤文件名,能夠看到這裏多了一個index文件,這就是那個staging area。再次運行git status
能夠看到main.c文件已經被跟蹤,並處於暫存狀態。
三:提交
而後再git commit進行提交,把數據提交到git倉庫中:
$git commit -m "this is first commit"
注意這裏經過-m 選項加一個註釋,這樣你就能夠提交你的數據到git倉庫了,也能夠把兩個步驟合併文一個步驟:
$git commit -a -m "this is first commit"
git有兩個配置文件,一個在$HOME下,是全局的,設置時加--global,另外一個在倉庫配置文件裏。
$git config
設置全局的:
本地的: