GIT使用—安裝配置及工做流程

1、Git 與 SVN 區別

GIT不只僅是個版本控制系統,它也是個內容管理系統(CMS),工做管理系統等。
一、GIT是分佈式的,SVN不是:這是GIT和其它非分佈式的版本控制系統,例如SVN,CVS等,最核心的區別。
二、GIT把內容按元數據方式存儲,而SVN是按文件:全部的資源控制系統都是把文件的元信息隱藏在一個相似.svn,.cvs等的文件夾裏。
三、GIT分支和SVN的分支不一樣:分支在SVN中一點不特別,就是版本庫中的另外的一個目錄。
四、GIT沒有一個全局的版本號,而SVN有:目前爲止這是跟SVN相比GIT缺乏的最大的一個特徵。
五、GIT的內容完整性要優於SVN:GIT的內容存儲使用的是SHA-1哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時下降對版本庫的破壞。git

2、GIT安裝

[root@localhost ~]# yum list |grep git
git.x86_64                                1.7.1-4.el6_7.1             centos6.7   
git-all.noarch                            1.7.1-4.el6_7.1             centos6.7  獲取其餘Git工具的元軟件包
git-cvs.noarch                            1.7.1-4.el6_7.1             centos6.7    導入CVS庫的Git工具
git-daemon.x86_64                         1.7.1-4.el6_7.1             centos6.7  共享你的版本庫,接受匿名下載請求
git-email.noarch                          1.7.1-4.el6_7.1             centos6.7  經過電子郵件發送Git補丁
git-gui.noarch                            1.7.1-4.el6_7.1             centos6.7   基於Tcl/Tk的圖形界面
git-svn.noarch                            1.7.1-4.el6_7.1             centos6.7  導入SVN庫的Git工具
gitk.noarch                               1.7.1-4.el6_7.1             centos6.7   更側重於項目歷史可視化的Git瀏覽器
gitweb.noarch                             1.7.1-4.el6_7.1             centos6.7   在瀏覽器裏顯示Git版本庫

[root@localhost ~]# yum install curl-devel expat-devel gettext-devel \
  openssl-devel zlib-devel
[root@localhost ~]# yum -y install git-core
[root@localhost ~]# git --version
git version 1.7.1

3、Git配置

Git 提供了一個叫作 git config 的工具,專門用來配置或讀取相應的工做環境變量。
這些環境變量,決定了 Git 在各個環節的具體工做方式和行爲。這些變量能夠存放在如下三個不一樣的地方:web

  • /etc/gitconfig 文件:系統中對全部用戶都廣泛適用的配置。若使用 git config 時用 --system 選項,讀寫的就是這個文件。
  • ~/.gitconfig 文件:用戶目錄下的配置文件只適用於該用戶。若使用 git config 時用 --global 選項,讀寫的就是這個文件。
  • 當前項目的 Git 目錄中的配置文件(也就是工做目錄中的 .git/config 文件):這裏的配置僅僅針對當前項目有效。每個級別的配置都會覆蓋上層的相同配置,因此 .git/config 裏的配置會覆蓋 /etc/gitconfig 中的同名變量。

(1)用戶信息
配置我的的用戶名稱和電子郵件地址:算法

[root@localhost ~]# git config --global user.name "tong"
[root@localhost ~]# git config --global user.email tong@test.com

若是用了 --global 選項,那麼更改的配置文件就是位於你用戶主目錄下的那個,之後你全部的項目都會默認使用這裏配置的用戶信息。
若是要在某個特定的項目中使用其餘名字或者電郵,只要去掉 --global 選項從新配置便可,新的設定保存在當前項目的 .git/config 文件裏。vim

(2)文本編輯器
設置Git默認使用的文本編輯器, 通常可能會是 Vi 或者 Vim。若是你有其餘偏好,好比 Emacs 的話,能夠從新設置:centos

[root@localhost ~]# git config --global core.editor vim

(3)差別分析工具
還有一個比較經常使用的是,在解決合併衝突時使用哪一種差別分析工具。好比要改用 vimdiff 的話:瀏覽器

[root@localhost ~]# git config --global merge.tool vimdiff

(4)查看配置信息服務器

[root@localhost ~]# git config --list
user.name=tong
user.email=tongxiaoda@anzhi.com
core.editor=vim
merge.tool=vimdiff

有時候會看到重複的變量名,那就說明它們來自不一樣的配置文件(好比 /etc/gitconfig 和 ~/.gitconfig),不過最終 Git 實際採用的是最後一個。網絡

[root@localhost ~]# cat .gitconfig 
[user]
	name = tong
	email = tongxiaoda@anzhi.com
[core]
	editor = vim
[merge]
	tool = vimdiff
[root@localhost ~]# git config user.name
tong

4、Git工做流程及原理

(1)工做流程
架構

通常工做流程以下:curl

  • 克隆Git資源做爲工做目錄。
  • 在克隆的資源上添加或修改文件。
  • 若是其餘人修改了,你能夠更新資源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成後,若是發現錯誤,能夠撤回提交併再次修改並提交。

(2)基本概念

  • 工做區:就是你在電腦裏能看到的目錄。
  • 暫存區:英文叫stage, 或index。通常存放在 ".git目錄下" 下的index文件(.git/index)中,因此咱們把暫存區有時也叫做索引(index)。
  • 版本庫:工做區有一個隱藏目錄.git,這個不算工做區,而是Git的版本庫。

版本庫中的暫存區和版本庫之間的關係:

圖中左側爲工做區,右側爲版本庫。在版本庫中標記爲 "index" 的區域是暫存區(stage, index),標記爲 "master" 的是 master 分支所表明的目錄樹。
圖中咱們能夠看出此時 "HEAD" 實際是指向 master 分支的一個"遊標"。因此圖示的命令中出現 HEAD 的地方能夠用 master 來替換。
圖中的 objects 標識的區域爲 Git 的對象庫,實際位於 ".git/objects" 目錄下,裏面包含了建立的各類對象及內容。

當對工做區修改(或新增)的文件執行 "git add" 命令時,暫存區的目錄樹被更新,同時工做區修改(或新增)的文件內容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區的文件索引中。
當執行提交操做(git commit)時,暫存區的目錄樹寫到版本庫(對象庫)中,master 分支會作相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹。
當執行 "git reset HEAD" 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,可是工做區不受影響。
當執行 "git rm --cached " 命令時,會直接從暫存區刪除文件,工做區則不作出改變。
當執行 "git checkout ." 或者 "git checkout -- " 命令時,會用暫存區所有或指定的文件替換工做區的文件。這個操做很危險,會清除工做區中未添加到暫存區的改動。
當執行 "git checkout HEAD ." 或者 "git checkout HEAD " 命令時,會用 HEAD 指向的 master 分支中的所有或者部分文件替換暫存區和以及工做區中的文件。這個命令也是極具危險性的,由於不但會清除工做區中未提交的改動,也會清除暫存區中未提交的改動。

(3)架構

從通常開發者的角度來看,git有如下功能:
一、從遠程服務器上克隆clone完整的git倉庫(包括代碼和版本信息)到本身的機器(單機)上。
二、在本身的機器上根據不一樣的開發目的,建立分支,修改代碼。
三、在單機上本身建立的分支上提交代碼。
四、在單機上合併分支。
五、把遠程服務器上最新版的代碼fetch下來,而後跟本身的主分支合併。
六、生成補丁(patch),把補丁發送給主開發者。
七、看主開發者的反饋,若是主開發者發現兩個通常開發者之間有衝突(他們之間能夠合做解決的衝突),就會要求他們先解決衝突,而後再由其中一我的提交。若是主開發者能夠本身解決,或者沒有衝突,就經過。
八、通常開發者之間解決衝突的方法,開發者之間可使用pull命令解決衝突,解決完衝突以後再向主開發者提交補丁。

從主開發者的角度看,git有如下功能: 一、查看郵件或者經過其它方式查看通常開發者的提交狀態。 二、打上補丁,解決衝突(能夠本身解決,也能夠要求開發者之間解決之後再從新提交,若是是開源項目,還要決定哪些補丁有用,哪些不用)。 三、向遠程服務器(公共的)提交結果,而後通知全部開發人員。

相關文章
相關標籤/搜索