1 關(guān)于版本節(jié)制
版本節(jié)制是一種記錄一個(gè)或若干文件內(nèi)容變革,以便未來(lái)查閱特定版本修訂環(huán)境的系統(tǒng)。有以下三種版本節(jié)制系統(tǒng):
1. 當(dāng)?shù)匕姹竟?jié)制系統(tǒng)
很多人習(xí)習(xí)用復(fù)制整個(gè)項(xiàng)目目次的方法來(lái)生存差異的版本,或者還會(huì)更名加上備份時(shí)間以示區(qū)別。這么做獨(dú)一的長(zhǎng)處就是簡(jiǎn)樸。不外弊端也不少:有時(shí)候會(huì)夾雜地址的事情目次,一旦弄錯(cuò)文件丟了數(shù)據(jù)就沒(méi)法取消規(guī)復(fù)。
為了辦理這個(gè)問(wèn)題,人們好久以前就開(kāi)拓了很多種當(dāng)?shù)匕姹竟?jié)制系統(tǒng),大多都是回收某種簡(jiǎn)樸的數(shù)據(jù)庫(kù)來(lái)記錄文件的歷次更新差別。圖示如下,
2. 會(huì)合化的版本節(jié)制系統(tǒng)
會(huì)合化的版本節(jié)制系統(tǒng)( Centralized Version Control Systems,簡(jiǎn)稱 CVCS )可以或許讓在差異的開(kāi)拓系統(tǒng)上的開(kāi)拓人員協(xié)同事情。這類(lèi)系統(tǒng),諸如 CVS,Subversion 以及 Perforce 等,都有一個(gè)單一的會(huì)合打點(diǎn)的處事器,生存所有文件的修訂版本,而協(xié)同事情的人們都通過(guò)客戶端連到這臺(tái)處事器,取出最新的文件可能提交更新。多年以來(lái),這已成為版本節(jié)制系統(tǒng)的尺度做法
3. 漫衍式版本節(jié)制系統(tǒng)
漫衍式版本節(jié)制系統(tǒng)(Distributed Version Control System,簡(jiǎn)稱 DVCS ),像 Git,Mercurial,Bazaar 以及 Darcs 等,客戶端并不但提取最新版本的文件快照,而是把代碼客棧完整地鏡像下來(lái)。這么一來(lái),任何一處協(xié)同工浸染的處事器產(chǎn)生妨礙,過(guò)后都可以用任何一個(gè)鏡像出來(lái)的當(dāng)?shù)乜蜅R?guī)復(fù)。因?yàn)槊恳淮蔚奶崛〔倏v,實(shí)際上都是一次對(duì)代碼客棧的完整備份,
更進(jìn)一步,很多這類(lèi)系統(tǒng)都可以指定和若干差異的遠(yuǎn)端代碼客棧舉辦交互。籍此,你就可以在同一個(gè)項(xiàng)目中,別離和差異事情小組的人彼此協(xié)作。你可以按照需要設(shè)定差異的協(xié)作流程,好比條理模子式的事情流,directadmin安裝 directadmin漢化,而這在以前的會(huì)合式系統(tǒng)中是無(wú)法實(shí)現(xiàn)的。
2 關(guān)于Git
Git是漫衍式版本節(jié)制系統(tǒng)的一個(gè)完美實(shí)現(xiàn),它與會(huì)合式版本節(jié)制系統(tǒng)SVN的根基區(qū)別如下:
Git是漫衍式的,而SVN不是
Git和SVN一樣有本身的會(huì)合式版本庫(kù)或處事器。但,GIT更傾向于被利用于漫衍式模式,也就是每個(gè)開(kāi)拓人員從中心版本庫(kù)/處事器上chect out代碼后會(huì)在本身的呆板上克隆一個(gè)本身的版本庫(kù)。
Git將內(nèi)容按元數(shù)據(jù)方法存儲(chǔ),而SVN是按文件
所有的資源節(jié)制系統(tǒng)都是把文件的元信息埋沒(méi)在一個(gè)雷同.svn,.cvs等的文件夾里。假如你把.git目次的體積巨細(xì)跟.svn較量,你會(huì)發(fā)明它們差距很大。因?yàn)?.git目次是處于你的呆板上的一個(gè)克隆版的版本庫(kù),它擁有中心版本庫(kù)上所有的對(duì)象,譬喻標(biāo)簽,分支,版本記錄等。
Git分支和SVN分支的差異
SVN的分支就是版本庫(kù)中的別的一個(gè)目次,而Git的分支卻是整個(gè)版本庫(kù)的一個(gè)快照,并且可以在同一個(gè)事情目次下快速的在幾個(gè)分支間切換。
Git沒(méi)有一個(gè)全局的版本號(hào),而SVN有
SVN的版本號(hào)實(shí)際是任何一個(gè)相應(yīng)時(shí)間的源代碼快照。而Git并沒(méi)有這樣的一個(gè)全局版本號(hào),這也是Git缺少的最大的一個(gè)特征
Git的內(nèi)容完整性要優(yōu)于SVN
Git的內(nèi)容存儲(chǔ)利用的是SHA-1哈希算法。這能確保代碼內(nèi)容的完整性,確保在碰著磁盤(pán)妨礙和網(wǎng)絡(luò)問(wèn)題時(shí)低落對(duì)版本庫(kù)的粉碎。
Git的根基事情流程如下:
在事情目次中修改某些文件。
對(duì)修改后的文件舉辦快照,然后生存到暫存區(qū)域。
提交更新,將生存在暫存區(qū)域的文件快照永久轉(zhuǎn)儲(chǔ)到 Git 目次中。
3 Git處事器搭建
1. 情況陳設(shè)
系統(tǒng)情況:處事器端:CentOS 6.5 ,ip:192.168.56.1
客戶端:CentOS 6.5 ,ip:192.168.56.101
軟件版本:處事器端:源碼編譯安裝,git-1.9.0.tar.gz
客戶端:yum在線安裝機(jī)制
2. 安裝
2.1 處事器端:
#yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
#wget http://git-core.googlecode.com/files/git-1.9.0.tar.gz
#tar zxvf git-1.9.0.tar.gz
#cd git-1.9.0
#make prefix=/usr/local all
#make prefix=/usr/local install #root用戶運(yùn)行
查察版本號(hào):git --version
git version 1.9.0
安裝gitosis:gitosis為Git用戶權(quán)限打點(diǎn)系統(tǒng),通過(guò)打點(diǎn)處事端的/home/git/.ssh/authorized_key文件來(lái)執(zhí)行對(duì)用戶權(quán)限的打點(diǎn),是一個(gè)python模塊包
#yum install python python-setuptools
#git clone git://github.com/res0nat0r/gitosis.git
#cd gitosis/
#python setup.py install
顯示Finished processing dependencies for gitosis==0.2即暗示樂(lè)成
2.2 客戶端安裝:
#yum install git
#git --version
git version 1.7.1
3. ssh配置
客戶端出產(chǎn)密鑰并上傳隨處事器端:
#ssh-keygen -t rsa
#scp ~/.ssh/id_rsa.pub [email protected]:~/
處事端查察已經(jīng)上傳的密鑰:ls ~/id_rsa.pub
4. 處事器上生成git用戶,利用git用戶并初始化gitosis
添加用戶git:
#useradd -r -s /bin/sh -c 'git version control' -d /home/git git
配置權(quán)限:
#mkdir -p /home/git
#chown git:git /home/git
在處事器端生成打點(diǎn)庫(kù):
#sudo -H -u git gitosis-init < ~/id_rsa.pub
Initialized empty Git repository in /home/git//repositories/gitosis-admin.git/ Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
注解:
1. 生成的gitosis-admin為Git的用戶會(huì)見(jiàn)權(quán)限打點(diǎn)庫(kù),gitosis通過(guò)這個(gè)git庫(kù)來(lái)打點(diǎn)所有g(shù)it庫(kù)的會(huì)見(jiàn)權(quán)限。
2. 通過(guò)執(zhí)行初始化,該公鑰的擁有者就能修改用于設(shè)置gitosis的誰(shuí)人非凡Git客棧了
修改上傳權(quán)限:
#chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
5. 客戶端導(dǎo)出打點(diǎn)
#mkdir -p /git-repo/
#cd /git-repo/
#git clone [email protected]:gitosis-admin.git
#cd gitosis-admin
#find .
./gitosis.conf
./keydir
.[email protected]
注解:
gitosis.conf文件用來(lái)配置用戶、客棧和權(quán)限的節(jié)制文件
keydir目次則是生存所有具有會(huì)見(jiàn)權(quán)限用戶公鑰的處所
.[email protected]:如前所述,該用戶具有會(huì)見(jiàn)權(quán)限
6. 客戶端建設(shè)及配置打點(diǎn)項(xiàng)目
#cd /git-repo/gitosis-admin
查察已經(jīng)上傳密鑰
#ls keydir/
[email protected]
授權(quán)和權(quán)限節(jié)制
#vim gitosis.conf
[gitosis]