1、Git起步

 

一、關於版本控制html

版本控制系統:版本控制是一種記錄一個或若干文件內容變化,以便未來查閱特定版本修訂狀況的系統。但實際上,你能夠對任何類型的文件進行版本控制。git

1.1 本地版本控制系統github

許多人習慣用複製整個項目目錄的方式來保存不一樣的版本,或許還會更名加上備份時間以示區別。這麼作惟一的好處就是簡單,可是特別容易犯錯。有時候會混淆所在的工做目錄,一不當心會寫錯文件或者覆蓋意想外的文件。shell

1.2 集中化的版本控制系統數據庫

集中化的版本控制系統(Centralized Version Control Systems,簡稱 CVCS):有一個單一的集中管理的服務器,保存全部文件的修訂版本,而協同工做的人們都經過客戶端連到這臺服務器,取出最新的文件或者提交更新。windows

 

這種作法帶來了許多好處,特別是相較於老式的本地 VCS 來講。如今,每一個人均可以在必定程度上看到項目中的其餘人正在作些什麼。而管理員也能夠輕鬆掌控每一個開發者的權限,而且管理一個 CVCS 要遠比在各個客戶端上維護本地數據庫來得輕鬆容易。緩存

事分兩面,有好有壞。這麼作最顯而易見的缺點是中央服務器的單點故障。若是宕機一小時,那麼在這一小時內,誰都沒法提交更新,也就沒法協同工做。若是中心數據庫所在的磁盤發生損壞,又沒有作恰當備份,毫無疑問你將丟失全部數據——包括項目的整個變動歷史,只剩下人們在各自機器上保留的單獨快照。本地版本控制系統也存在相似問題,只要整個項目的歷史記錄被保存在單一位置,就有丟失全部歷史更新記錄的風險。安全

1.3 分佈式版本控制系統服務器

分佈式版本控制系統(Distributed Version Control System,簡稱 DVCS):客戶端並不僅提取最新版本的文件快照,而是把代碼倉庫完整地鏡像下來。這麼一來,任何一處協同工做用的服務器發生故障,過後均可以用任何一個鏡像出來的本地倉庫恢復。由於每一次的克隆操做,實際上都是一次對代碼倉庫的完整備份。網絡

二、Git簡史

Linux 內核開源項目有着爲數衆廣的參與者。絕大多數的 Linux 內核維護工做都花在了提交補丁和保存歸檔的繁雜事務上(1991-2002年間)。到 2002 年,整個項目組開始啓用一個專有的分佈式版本控制系統 BitKeeper來管理和維護代碼。
到了 2005 年,開發 BitKeeper 的商業公司同 Linux 內核開源社區的合做關係結束,他們收回了 Linux 內核社區無償使用 BitKeeper 的權力。這就迫使 Linux 開源社區(特別是 Linux 的締造者 Linux Torvalds)基於使用BitKcheper 時的經驗教訓,開發出本身的版本系統。他們對新的系統制訂了若干目標:
• 速度
• 簡單的設計
• 對非線性開發模式的強力支持(容許成千上萬個並行開發的分支)
• 徹底分佈式
• 有能力高效管理相似 Linux 內核同樣的超大規模項目(速度和數據量)
自誕生於 2005 年以來,Git 日臻成熟完善,在高度易用的同時,仍然保留着初期設定的目標。它的速度飛快,極其適合管理大項目,有着使人難以置信的非線性分支管理系統(參見 Git 分支)。

三、Git基礎

3.1 與其餘版本控制系統的差異

直接記錄快照,而非差別比較

Git 和其它版本控制系統(包括 Subversion 和近似工具)的主要差異在於 Git 對待數據的方法。概念上來區分,其它大部分系統以文件變動列表的方式存儲信息。這類系統(CVS、Subversion、Perforce、Bazaar 等等)將它們保存的信息看做是一組基本文件和每一個文件隨時間逐步累積的差別。

 

Git 不按照以上方式對待或保存數據。反之,Git 更像是把數據看做是對小型文件系統的一組快照。每次你提交更新,或在 Git 中保存項目狀態時,它主要對當時的所有文件製做一個快照並保存這個快照的索引。爲了高效,若是文件沒有修改,Git 再也不從新存儲該文件,而是隻保留一個連接指向以前存儲的文件。Git 對待數據更像是一個 快照流。

Git 更像是一個小型的文件系統,提供了許多以此爲基礎構建的超強工具,而不僅是一個簡單的 VCS。
 3.2 操做方式上的差異

近乎全部操做都是本地執行

在 Git 中的絕大多數操做都只須要訪問本地文件和資源,通常不須要來自網絡上其它計算機的信息。

3.3 完整性

Git 保證完整性

Git 中全部數據在存儲前都計算校驗和,而後以校驗和來引用。

Git 用以計算校驗和的機制叫作 SHA-1 散列(hash,哈希)。這是一個由 40 個十六進制字符(0-9 和 a-f)組成字符串,基於 Git 中文件的內容或目錄結構計算出來。SHA-1 哈希看起來是這樣:24b9da6552252987aa493b52f8696cd6d3b00373

實際上,Git 數據庫中保存的信息都是以文件內容的哈希值來索引,而不是文件名。

3.4 Git 通常只添加數據

執行的 Git 操做,幾乎只往 Git 數據庫中增長數據。很難讓 Git 執行任何不可逆操做,或者讓它以任何方式清除數據。同別的 VCS 同樣,未提交更新時有可能丟失或弄亂修改的內容;可是一旦你提交快照到 Git 中,就難以再丟失數據,特別是若是你按期的推送數據庫到其它倉庫的話。

3.5 三種狀態

Git 有三種狀態,你的文件可能處於其中之一:已提交(committed)、已修改(modified)和已暫存(staged)。

已提交表示數據已經安全的保存在本地數據庫中。

已修改表示修改了文件,但還沒保存到數據庫中。

已暫存表示對一個已修改文件的當前版本作了標記,使之包含在下次提交的快照中。
由此引入 Git 項目的三個工做區域的概念:Git 倉庫、工做目錄以及暫存區域。

Git 倉庫目錄是 Git 用來保存項目的元數據和對象數據庫的地方。這是 Git 中最重要的部分,從其它計算機克隆倉庫時,拷貝的就是這裏的數據。
工做目錄是對項目的某個版本獨立提取出來的內容。這些從 Git 倉庫的壓縮數據庫中提取出來的文件,放在磁盤上供你使用或修改。
暫存區域是一個文件,保存了下次將提交的文件列表信息,通常在 Git 倉庫目錄中。有時候也被稱做`‘索引’',不過通常說法仍是叫暫存區域。

基本的 Git 工做流程以下:
1. 在工做目錄中修改文件。
2. 暫存文件,將文件的快照放入暫存區域。
3. 提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄。

若是 Git 目錄中保存着的特定版本文件,就屬於已提交狀態。若是做了修改並已放入暫存區域,就屬於已暫存狀態。若是自上次取出後,做了修改但尚未放到暫存區域,就是已修改狀態。

(如何根據文件狀態實施後續操做,以及怎樣跳過暫存直接提交)

四、命令行

Git 有多種使用方式。你可使用原生的命令行模式,也可使用 GUI 模式,咱們將使用命令行模式。這是由於首先,只有在命令行模式下你才能執行 Git 的 全部 命令,而大多數的 GUI 軟件只實現了 Git 全部功能的一個子集以下降操做難度。

若是你學會了在命令行下如何操做,那麼你在操做 GUI軟件時應該也不會遇到什麼困難,可是,反之則不成立。此外,因爲每一個人的想法與側重點不一樣,不一樣的人經常會安裝不一樣的 GUI 軟件,但 全部人必定會有命令行工具。

五、安裝Git

5.1 在 Linux 上安裝

若是你想在 Linux 上用二進制安裝程序來安裝 Git,可使用發行版包含的基礎軟件包管理工具來安裝。

若是以Fedora 上爲例,你可使用 yum: # sudo yum install git
若是你在基於 Debian 的發行版上,請嘗試用 apt-get:  # sudo apt-get install git

5.2 在 Mac 上安裝

最簡單的方法是安裝 Xcode Command Line Tools。Mavericks (10.9) 或更高版本的系統中,在 Terminal 裏嘗試首次運行 git 命令便可。若是沒有安裝過命令行開發者工具,將會提示你安裝。

若是你想安裝更新的版本,可使用二進制安裝程序。官方維護的 OSX Git 安裝程序能夠在 Git 官方網站下載,網址爲 http://git-scm.com/download/mac。

 

也能夠將它做爲 GitHub for Mac 的一部分來安裝。它們的圖形化 Git 工具備一個安裝命令行工具的選項。你能夠從 GitHub for Mac 網站下載該工具,網址爲 http://mac.github.com。

5.3 在 Windows 上安裝

在 Windows 上安裝 Git 也有幾種安裝方法。官方版本能夠在 Git 官方網站下載。打開 http://git-scm.com/download/win,下載會自動開始。要注意這是一個名爲 Git for Windows的項目(也叫作
msysGit),和 Git 是分別獨立的項目;更多信息請訪問 http://msysgit.github.io/。
另外一個簡單的方法是安裝 GitHub for Windows。該安裝程序包含圖形化和命令行版本的 Git。它也能支持Powershell,提供了穩定的憑證緩存和健全的 CRLF 設置。稍後咱們會對這方面有更多瞭解,如今只要一句話就夠了,這些都是你所須要的。你能夠在 GitHub for Windows 網站下載,網址爲 http://windows.github.com。

5.4 從源代碼安裝

想從源碼安裝 Git,須要安裝 Git 依賴的庫:curl、zlib、openssl、expat,還有libiconv。

若是你的系統上有 yum (如 Fedora)或者 apt-get(如基於 Debian 的系統),可使用如下命令之一來安裝最小化的依賴包來編譯和安裝 Git 的二進制版:
  # sudo yum install curl-devel expat-devel gettext-devel  openssl-devel zlib-devel
  # sudo apt-get install libcurl4-gnutls-dev libexpat1-dev gettext  libz-dev libssl-dev
爲了可以添加更多格式的文檔(如 doc, html, info),你須要安裝如下的依賴包:
 # sudo yum install asciidoc xmlto docbook2x
  # sudo apt-get install asciidoc xmlto docbook2x
當你安裝好全部的必要依賴,你能夠繼續從幾個地方來取得最新發布版本的 tar 包。

你能夠從 Kernel.org 網站獲取,網址爲 https://www.kernel.org/pub/software/scm/git,或從 GitHub 網站上的鏡像來得到,網址爲https://github.com/git/git/releases。

一般在 GitHub 上的是最新版本,但 kernel.org 上包含有文件下載簽名,若是你想驗證下載正確性的話會用到。
接着,編譯並安裝:
 # tar -zxf git-2.0.0.tar.gz
 # cd git-2.0.0
 # make configure
 # ./configure --prefix=/usr
 # make all doc info
 # sudo make install install-doc install-html install-info
完成後,你可使用 Git 來獲取 Git 的升級:
 # git clone git://git.kernel.org/pub/scm/git/git.git

六、初次運行 Git 前的配置

6.1 配置文件

定製你的 Git 環境,每臺計算機上只須要配置一次,程序升級時會保留配置信息。你能夠在任什麼時候候再次經過運行命令來修改它們。

Git 自帶一個 git config 的工具來幫助設置控制 Git 外觀和行爲的配置變量。這些變量存儲在三個不一樣的位置:
1. /etc/gitconfig 文件: 包含系統上每個用戶及他們倉庫的通用配置。 若是使用帶有 --system 選項的git config 時,它會今後文件讀寫配置變量。
2. ~/.gitconfig 或 ~/.config/git/config 文件:只針對當前用戶。 能夠傳遞 --global 選項讓 Git讀寫此文件。
3. 當前使用倉庫的 Git 目錄中的 config 文件(就是 .git/config):針對該倉庫。
每個級別覆蓋上一級別的配置,因此 .git/config 的配置變量會覆蓋 /etc/gitconfig 中的配置變量。
在 Windows 系統中,Git 會查找 $HOME 目錄下(通常狀況下是 C:\Users\$USER)的 .gitconfig 文件。

Git 一樣也會尋找 /etc/gitconfig 文件,但只限於 MSys 的根目錄下,即安裝 Git 時所選的目標位置。

6.2 用戶信息

安裝完 Git 應該作的第一件事就是設置你的用戶名稱與郵件地址。這樣作很重要,由於每個 Git 的提交都會使用這些信息,而且它會寫入到你的每一次提交中,不可更改:
# git config --global user.name "John Doe"
# git config --global user.email johndoe@example.com

再次強調,若是使用了 --global 選項,那麼該命令只須要運行一次,由於以後不管你在該系統上作任何事情, Git 都會使用那些信息。

當你想針對特定項目使用不一樣的用戶名稱與郵件地址時,能夠在那個項目目錄下運行沒有 --global 選項的命令來配置。
不少 GUI 工具都會在第一次運行時幫助你配置這些信息。

6.3 文本編輯器

配置默認文本編輯器:當 Git 須要你輸入信息時會調用它。若是未配置,Git 會使用操做系統默認的文本編輯器,一般是 Vim。若是你想使用不一樣的文本編輯器,例如 Emacs,

能夠這樣作:# git config --global core.editor emacs

6.4 檢查配置信息

若是想要檢查你的配置,可使用 git config --list 命令來列出全部 Git 當時能找到的配置。

可能會看到重複的變量名,由於 Git 會從不一樣的文件中讀取同一個配置(例如:/etc/gitconfig 與~/.gitconfig)。這種狀況下,Git 會使用它找到的每個變量的最後一個配置。
你能夠經過輸入 git config <key>: 來檢查 Git 的某一項配置

6.5 獲取幫助

若你使用 Git 時須要獲取幫助,有三種方法能夠找到 Git 命令的使用手冊:# git help <verb># git <verb> --help# man git-<verb>例如,要想得到 config 命令的手冊,執行# git help config

相關文章
相關標籤/搜索