天天看點

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

本文介紹GIT工具的安裝及工作流程原理

一、Git 與 SVN 差別

GIT不僅僅是個版本控制系統,它也是個内容管理系統(CMS),工作管理系統等。

1、GIT是分布式的,SVN不是:這是GIT和其它非分布式的版本控制系統,例如SVN,CVS等,最核心的差別。

2、GIT把内容按中繼資料方式存儲,而SVN是按檔案:所有的資源控制系統都是把檔案的元資訊隐藏在一個類似.svn,.cvs等的檔案夾裡。

3、GIT分支和SVN的分支不同:分支在SVN中一點不特别,就是版本庫中的另外的一個目錄。

4、GIT沒有一個全局的版本号,而SVN有:目前為止這是跟SVN相比GIT缺少的最大的一個特征。

5、GIT的内容完整性要優于SVN:GIT的内容存儲使用的是SHA-1雜湊演算法。這能確定代碼内容的完整性,確定在遇到磁盤故障和網絡問題時降低對版本庫的破壞。

二、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
           

三、Git配置

Git 提供了一個叫做 git config 的工具,專門用來配置或讀取相應的工作環境變量。

這些環境變量,決定了 Git 在各個環節的具體工作方式和行為。這些變量可以存放在以下三個不同的地方:

  • /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 [email protected]
           

如果用了 --global 選項,那麼更改的配置檔案就是位于你使用者主目錄下的那個,以後你所有的項目都會預設使用這裡配置的使用者資訊。

如果要在某個特定的項目中使用其他名字或者電郵,隻要去掉 --global 選項重新配置即可,新的設定儲存在目前項目的 .git/config 檔案裡。

(2)文本編輯器

設定Git預設使用的文本編輯器, 一般可能會是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的話,可以重新設定:

[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
[email protected]
core.editor=vim
merge.tool=vimdiff
           

有時候會看到重複的變量名,那就說明它們來自不同的配置檔案(比如 /etc/gitconfig 和 ~/.gitconfig),不過最終 Git 實際采用的是最後一個。

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

四、Git工作流程及原理

(1)工作流程

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

一般工作流程如下:

  • 克隆Git資源作為工作目錄。
  • 在克隆的資源上添加或修改檔案。
  • 如果其他人修改了,你可以更新資源。
  • 在送出前檢視修改。
  • 送出修改。
  • 在修改完成後,如果發現錯誤,可以撤回送出并再次修改并送出。

(2)基本概念

  • 工作區:就是你在電腦裡能看到的目錄。
  • 暫存區:英文叫stage, 或index。一般存放在 ".git目錄下" 下的index檔案(.git/index)中,是以我們把暫存區有時也叫作索引(index)。
  • 版本庫:工作區有一個隐藏目錄.git,這個不算工作區,而是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使用—安裝配置及工作流程

從一般開發者的角度來看,git有以下功能:

1、從遠端伺服器上克隆clone完整的git倉庫(包括代碼和版本資訊)到自己的機器(單機)上。

2、在自己的機器上根據不同的開發目的,建立分支,修改代碼。

3、在單機上自己建立的分支上送出代碼。

4、在單機上合并分支。

5、把遠端伺服器上最新版的代碼fetch下來,然後跟自己的主分支合并。

6、生成更新檔(patch),把更新檔發送給主開發者。

7、看主開發者的回報,如果主開發者發現兩個一般開發者之間有沖突(他們之間可以合作解決的沖突),就會要求他們先解決沖突,然後再由其中一個人送出。如果主開發者可以自己解決,或者沒有沖突,就通過。

8、一般開發者之間解決沖突的方法,開發者之間可以使用pull指令解決沖突,解決完沖突之後再向主開發者送出更新檔。

從主開發者的角度看,git有以下功能:

1、檢視郵件或者通過其它方式檢視一般開發者的送出狀态。

2、打上更新檔,解決沖突(可以自己解決,也可以要求開發者之間解決以後再重新送出,如果是開源項目,還要決定哪些更新檔有用,哪些不用)。

3、向遠端伺服器(公共的)送出結果,然後通知所有開發人員。