git 入門一(初識)

分佈式版本控制系統 & 集中式版本控制系統
 
分佈式版本控制系統( Distributed Version Control System)在這類系統中,像 Git,Mercurial,Bazaar 以及 Darcs 等,客戶端並不僅提取最新版本的文件快照,而是把原始的代碼倉庫完整地鏡像下來。這麼一來,任何一處協同工做用的服務器發生故障,過後均可以用任何一個鏡像出來的本地倉庫恢復。由於每一次的提取操做,實際上都是一次對代碼倉庫的完整備份。
 
  集中化的版本控制系統( Centralized Version Control Systems)。這類系統,諸如 CVS,Subversion 以及 Perforce 等,都有一個單一的集中管理的服務器,保存全部文件的修訂版本,而協同工做的人們都經過客戶端連到這臺服務器,取出最新的文件或者提交更新。多年以來,這已成爲版本控制系統的標準作,  顯而易見的缺點是中央服務器的單點故障風險。
 
Git 起源
 
同生活中的許多偉大事件同樣,Git 誕生於一個極富紛爭大舉創新的年代。Linux 內核開源項目有着爲數衆廣的參與者。絕大多數的 Linux 內核維護工做都花在了提交補丁和保存歸檔的繁雜事務上(1991-2002年間)。到 2002 年,整個項目組開始啓用分佈式版本控制系統 BitKeeper 來管理和維護代碼。 到了 2005 年,開發 BitKeeper 的商業公司同 Linux 內核開源社區的合做關係結束,他們收回了無償使用 BitKeeper 的權力。這就迫使 Linux 開源社區(特別是 Linux 的締造者 Linus Torvalds )不得不吸收教訓,只有開發一套屬於本身的版本控制系統纔不至於重蹈覆轍。他們對新的系統制訂了若干目標:
  • 速度
  • 簡單的設計
  • 對非線性開發模式的強力支持(容許上千個並行開發的分支)
  • 徹底分佈式
  • 有能力高效管理相似 Linux 內核同樣的超大規模項目(速度和數據量

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

 
      Git 和其餘版本控制系統的主要差異在於,Git 只關心文件數據的總體是否發生變化,而大多數其餘系統則只關心文件內容的具體差別。這類系統(CVS,Subversion,Perforce,Bazaar 等等)每次記錄有哪些文件做了更新,以及都更新了哪些行的什麼內容.
Git 並不保存這些先後變化的差別數據。實際上,Git 更像是把變化的文件做快照後,記錄在一個微型的文件系統中。每次提交更新時,它會縱覽一遍全部文件的指紋信息並對文件做一快照,而後保存一個指向此次快照的索引。爲提升性能,若文件沒有變化,Git 不會再次保存,而只對上次保存的快照做一連接. 這是 Git 同其餘系統的重要區別。它徹底顛覆了傳統版本控制的套路,並對各個環節的實現方式做了新的設計。Git 更像是個小型的文件系統
近乎全部操做都是本地執行
 Git 中的絕大多數操做都只須要訪問本地文件和資源,不用連網。但若是用 CVCS 的話,差很少全部操做都須要鏈接網絡。由於 Git 在本地磁盤上就保存着全部當前項目的歷史更新,因此處理起來速度飛快。 舉個例子,若是要瀏覽項目的歷史更新摘要,Git 不用跑到外面的服務器上去取數據回來,而直接從本地數據庫讀取後展現給你看。因此任什麼時候候你均可以立刻翻閱,無需等待。若是想要看當前版本的文件和一個月前的版本之間有何差別,Git 會取出一個月前的快照和當前文件做一次差別運算,而不用請求遠程服務器來作這件事,或是把老版本的文件拉到本地來做比較。

時刻保持數據完整性

保存到 Git 以前,全部數據都要進行內容的校驗和(checksum)計算,並將此結果做爲數據的惟一標識和索引。換句話說,不可能在你修改了文件或目錄以後,Git 一無所知。這項特性做爲 Git 的設計哲學,建在總體架構的最底層。因此若是文件在傳輸時變得不完整,或者磁盤損壞致使文件數據缺失,Git 都能當即察覺。 Git 使用 SHA-1 算法計算數據的校驗和,經過對文件的內容或目錄的結構計算出一個 SHA-1 哈希值,做爲指紋字符串。該字串由 40 個十六進制字符(0-9 及 a-f)組成,看起來就像是: 24b9da6552252987aa493b52f8696cd6d3b00373
 
Git 的工做徹底依賴於這類指紋字串,因此你會常常看到這樣的哈希值。實際上,全部保存在 Git 數據庫中的東西都是用此哈希值來做索引的,而不是靠文件名。
多數操做僅添加數據
經常使用的 Git 操做大多僅僅是把數據添加到數據庫。由於任何一種不可逆的操做,好比刪除數據,都會使回退或重現歷史版本變得困難重重。在別的 VCS 中,若還未提交更新,就有可能丟失或者混淆一些修改的內容,但在 Git 裏,一旦提交快照以後就徹底不用擔憂丟失數據,特別是養成按期推送到其餘倉庫的習慣的話。 這種高可靠性令咱們的開發工做安心很多,儘管去作各類試驗性的嘗試好了,再怎樣也不會弄丟數據。

文件的三種狀態

對於任何一個文件,在 Git 內都只有三種狀態:已提交(committed),已修改(modified)和已暫存(staged)。已提交表示該文件已經被安全地保存在本地數據庫中了;已修改表示修改了某個文件,但尚未提交保存;已暫存表示把已修改的文件放在下次提交時要保存的清單中。
由此咱們看到 Git 管理項目時,文件流轉的三個工做區域:Git 的工做目錄,暫存區域,以及本地倉庫。
 

從項目中取出某個版本的全部文件和目錄,用以開始後續工做的叫作工做目錄。這些文件實際上都是從 Git 目錄中的壓縮對象數據庫中提取出來的,接下來就能夠在工做目錄中對這些文件進行編輯。git

所謂的暫存區域只不過是個簡單的文件,通常都放在 Git 目錄中。有時候人們會把這個文件叫作索引文件,不過標準說法仍是叫暫存區域。算法

基本的 Git 工做流程以下:數據庫

  1. 在工做目錄中修改某些文件。
  2. 對修改後的文件進行快照,而後保存到暫存區域。
  3. 提交更新,將保存在暫存區域的文件快照永久轉儲到 Git 目錄中。
 
因此,咱們能夠從文件所處的位置來判斷狀態:若是是 Git 目錄中保存着的特定版本文件,就屬於已提交狀態;若是做了修改並已放入暫存區域,就屬於已暫存狀態;若是自上次取出後,做了修改但尚未放到暫存區域,就是已修改狀態。到第二章的時候,咱們會進一步瞭解其中細節,並學會如何根據文件狀態實施後續操做,以及怎樣跳過暫存直接提交。
 
Windows 安裝Git
 
windows 上安裝安裝git的安裝包下載地址: http://code.google.com/p/msysgit ,完成安裝以後,可使用Git Bash 命令行工具,git GUI 圖形化界面工具。包括了SSH客戶端。
 
初次運行git 配置
 
git 的配置按不一樣的級別在不一樣的目錄。
--system 系統級別  保存在安裝目錄下的etc/gitconfig 配置文件。
--global 用戶級別,保存在C:\Users\$user\.gitconfig 配置文件
默認是項目基本,保存在.git/config 配置文件中,通常用戶配置名稱,郵件等,差別比較工具和文件編輯器等。
 
配置用戶名和email 差別比較工具 編碼等
 
git config --global user.name "andyyu"
git config --global  user.email "andyyu@gmail"
 
git config --global  merge.tool  kidff3
 
git config --global core.editor  vim
 
查看用戶 配置信息
 
git config --global -l
git config --list
git config user.name
 
修改和刪除用戶信息
 
git config --global  --reanme-section  use  user
git config --global  --remove-section user
 
git config --global --unset  user.name
相關文章
相關標籤/搜索