特點: 1.可以快速的切換項目分支. 2.回滾某個分支的版本. 3.每次切換分支不用修改配置文件 (因項目而定義) 4.不用 新建/切換 虛擬目錄/域名.因為都是在同一個目錄下進行. 5.上面這些對你有吸引力嗎? 喜歡那就參與進來吧.
什么是Git
Git是Linux Torvalds為了幫助管理 Linux,內(nèi)核開發(fā)而開發(fā)的一個開放源碼的版本控制軟件.
特點是快速,開源,分布式管理系統(tǒng).
它可以對代碼的修改進行回滾,將錯誤的代碼剔除.
或者簡單地跟蹤哪些人修改了代碼的哪些行的內(nèi)容.
對比:集中化的版本控制
集中化的版本控制系統(tǒng)通常采用兩種方式:
有些提供了文件鎖來防止多個用戶的并行訪問,這些系統(tǒng)對文件進行加鎖,這樣在某個時間只有一個開發(fā)人員對中心倉庫具有寫入權(quán)限.
另外一些工具,例如 SVN,允許多個開發(fā)人員同時對相同的文件進行編輯,并提供了一些機制稍后合并這些修改。 CVS,SVN 等工具都是代碼部署到服務器上,每次需要遠程更新到本地,解決沖突在此提交. 這樣弊端很明顯,如果這臺服務器掛掉幾個小時,可能在這幾個小時內(nèi),你的代碼都無法去提交.
配圖:

圖解: 代碼都集中部署到一臺服務器上,每臺電腦需更新服務器上的代碼,修改后提交到服務器上.
弊端:如果版本控制這臺服務器掛掉,可能對整個項目開發(fā)都會造成影響,因為開發(fā)者都不能提交,其他人也無法獲取到代碼,最重要的是代碼也無法時時的進行備份,改動大風險也更大.如果你在一個不能連接網(wǎng)絡的地方時,就像在飛機上,火車上,或者某些無網(wǎng)絡的情況下,就不能提交文件,查看歷史版本記錄,創(chuàng)建項目分支,等.
對比:分布式的版本控制
GIT跟SVN一樣有自己的集中式版本庫或服務器.
但GIT更傾向于被使用于分布式模式,也就是以每個開發(fā)人員為中心 版本庫/服務器 上chectout代碼后會在自己的機器上克隆一個自己的版本庫.
如果你在一個不能連接網(wǎng)絡的地方時,就像在飛機上,火車上,或者某些無網(wǎng)絡的情況下,也一樣可以提交文件,查看歷史版本記錄,創(chuàng)建項目分支,等. GIT把內(nèi)容按元數(shù)據(jù)方式存儲,而SVN是按文件:
所有的資源控制系統(tǒng)都是把文件的元信息隱藏在一個類似.svn,.cvs等的文件夾里.
把.git目錄的體積大小跟.svn比較,會發(fā)現(xiàn)它們差距很大.
.git目錄是處于你的機器上的一個克隆版的版本庫,它擁有中心版本庫上所有的東西,例如標簽,分支,版本記錄等.
配圖:

圖解:開發(fā)者從 版本庫/服務器 克隆一份代碼,可以隨意的 新建/切換 分支,可以同時在 版本1,版本2 中去來回切換修改代碼,互并不影響其他版本.
把開發(fā)者的機器也克隆成一臺服務器,同樣也擁有,查看歷史記錄,創(chuàng)建,合并分支等功能.
操作環(huán)境
操作系統(tǒng):Mac Os
虛擬主機:VMware Fusion
虛擬系統(tǒng):Centos 5.5+
操作用戶:Root
實現(xiàn)目的:搭建Git版本控制.
安裝依賴庫和版本控制軟件
# 安裝 Git#######################################################
# Git 依賴庫 yum install -y gettext-devel expat-devel curl-devel zlib-devel openssl-devel
# Centos http:///projects/git-snapshots/git/git-latest.tar.gz
# Mac Os 安裝最新版XCode即可
# Windows Msysgit http://code.google.com/p/msysgit/downloads/list
# Ubuntu sudo apt-get install git git-core #(可能會出現(xiàn)未發(fā)現(xiàn)軟件源,推薦下載tar.gz包安裝包)
# 安裝 Git End####################################################
# Gitosis(GIT環(huán)境)
安裝Git后在安裝Gitosis
安裝Git
# 存放軟件包目錄 cd /web/git
tar -zxvf git-latest.tar.gz cd git-2011-12-14/ # 根據(jù)當前版本解壓目錄名稱可能不同 make -j6
# 如果出現(xiàn)找不到libiconv.so庫設置一下軟連接 ln -s /usr/local/lib/libiconv.so.2 /usr/lib/libiconv.so.2
make install
# 測試安裝是否成功 git
#如圖

簡單配置Gitosis
Git我們安裝好了,這時我們需要一臺服務器(或者Git Hub開始使用一下Git)
Git Hub很簡單網(wǎng)上資料較多,找一下,我就不在重復的總結(jié)了.
有時我們開發(fā)環(huán)境是局域網(wǎng),并且源碼不想讓其他人看到,這時需要在局域網(wǎng)上搭建一臺GIT Server
本篇主要介紹Git的,只是搭建一個環(huán)境提供簡單的使用,不會過多的介紹Gitosis.
# 創(chuàng)建Git目錄 mkdir /git cd /git
# 克隆Gitosis git clone git://eagain.net/gitosis.git
# 安裝python擴展 yum -y install python python-setuptools
# 安裝 cd gitosis python setup.py install
# 生成共秘鑰 ssh-keygen -t rsa -C 'xinxiangmo@gmail.com'
# 公鑰發(fā)送到git Server上 scp ~/.ssh/id_rsa.pub root@ce.com:/git (ce.com是我指向的虛擬機IP)
# 切換到Git Server添加,切換用戶 adduser git su git
# 初始化版本庫 gitosis-init < /git/id_rsa.pub # Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/ # Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
# 切換本機,克隆倉庫,修改創(chuàng)建項目 # (可以直接在Git Server /home/git/repositories/gitosis-admin.git/gitosis.conf 下操作) git clone git@ce.com:gitosis-admin.git
# 新建項目(名稱woyaoquan) vi gitosis-admin/gitosis.conf [group woyaoquan] writable = woyaoquan members = xinxiangmo@gmail.com
# 切換本機重新克隆 git clone git@ce.com:woyaoquan.git cd woyaoquan && touch index.php git add . #添加緩存區(qū) git commit -m "提交文件,添加index.php文件"
[master (root-commit) 42e0160] 提交文件,添加index.php文件 0 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 index.php
git push #發(fā)布到master分支上
Git + Git Flow 項目中使用
在上面已經(jīng)使用過Git的一些參數(shù),詳細講Git的有很多,比較詳細的有 Git Book Pro Git 等,就不太過多的Copy,Git本身也比較靈活.
一般都會使用Git Flow控制版本發(fā)布流程, 因篇幅問題就不在這里展示安裝Git Flow了,也比較簡單.
簡單的說一下項目的發(fā)布流程
Git flow普通BUG流程:
# 進入克隆倉庫(上面有方法) clone cd /git/woyaoquan # 初始化版本流程控制 git checkout -b develop origin/develop # 初始化工作目錄(一直回車即可) git flow init # 開始創(chuàng)建新的需求分支,目的修改image git flow feature start editimage #這時項目會自動切換 feature/editimage分支 # 更改部分代碼后 # git commit -a -m "修改完了" # 完成開發(fā)分支合并develop(自動) git flow feature finish editimage # 發(fā)布到遠程開發(fā)分支 git push origin develop
Git flow 緊急BUG流程(1)
# 拉回release版本 git pull origin release/v1.0 # 切換分支 git checkout release/v1.0 # 修改BUG # git commit -a -m "修改完BUG,BUG文件+行數(shù)" # 修改完后提交 git push origin release/v1.0
Git flow 緊急BUG流程(2)
# 更新master分支 git pull origin master(更新master分支為最新) # 切換到master分支 git checkout master #生成一個hotfix分支 git flow hotfix start hfx
# 通知相關得工程師和測試人員hotfix分支名稱 # 最終測試完成后拉回分支最新代碼 git pull origin hotfix/hfx # 最終修改和測試完成后,結(jié)束hot fix以供發(fā)布 git flow hot fix finish hfx # 發(fā)布最終的master分支 git push origin master
|