1 關于版本節制
版本節制是一種記錄一個或若干文件內容變革,以便未來查閱特定版本修訂環境的系統。有以下三種版本節制系統:
1. 當地版本節制系統
很多人習習用復制整個項目目次的方法來生存差異的版本,或者還會更名加上備份時間以示區別。這么做獨一的長處就是簡樸。不外弊端也不少:有時候會夾雜地址的事情目次,一旦弄錯文件丟了數據就沒法取消規復。
為了辦理這個問題,人們好久以前就開拓了很多種當地版本節制系統,大多都是回收某種簡樸的數據庫來記錄文件的歷次更新差別。圖示如下,
2. 會合化的版本節制系統
會合化的版本節制系統( Centralized Version Control Systems,簡稱 CVCS )可以或許讓在差異的開拓系統上的開拓人員協同事情。這類系統,諸如 CVS,Subversion 以及 Perforce 等,都有一個單一的會合打點的處事器,生存所有文件的修訂版本,而協同事情的人們都通過客戶端連到這臺處事器,取出最新的文件可能提交更新。多年以來,這已成為版本節制系統的尺度做法
3. 漫衍式版本節制系統
漫衍式版本節制系統(Distributed Version Control System,簡稱 DVCS ),像 Git,Mercurial,Bazaar 以及 Darcs 等,客戶端并不但提取最新版本的文件快照,而是把代碼客棧完整地鏡像下來。這么一來,任何一處協同工浸染的處事器產生妨礙,過后都可以用任何一個鏡像出來的當地客棧規復。因為每一次的提取操縱,實際上都是一次對代碼客棧的完整備份,
更進一步,很多這類系統都可以指定和若干差異的遠端代碼客棧舉辦交互。籍此,你就可以在同一個項目中,別離和差異事情小組的人彼此協作。你可以按照需要設定差異的協作流程,好比條理模子式的事情流,directadmin安裝 directadmin漢化,而這在以前的會合式系統中是無法實現的。
2 關于Git
Git是漫衍式版本節制系統的一個完美實現,它與會合式版本節制系統SVN的根基區別如下:
Git是漫衍式的,而SVN不是
Git和SVN一樣有本身的會合式版本庫或處事器。但,GIT更傾向于被利用于漫衍式模式,也就是每個開拓人員從中心版本庫/處事器上chect out代碼后會在本身的呆板上克隆一個本身的版本庫。
Git將內容按元數據方法存儲,而SVN是按文件
所有的資源節制系統都是把文件的元信息埋沒在一個雷同.svn,.cvs等的文件夾里。假如你把.git目次的體積巨細跟.svn較量,你會發明它們差距很大。因為,.git目次是處于你的呆板上的一個克隆版的版本庫,它擁有中心版本庫上所有的對象,譬喻標簽,分支,版本記錄等。
Git分支和SVN分支的差異
SVN的分支就是版本庫中的別的一個目次,而Git的分支卻是整個版本庫的一個快照,并且可以在同一個事情目次下快速的在幾個分支間切換。
Git沒有一個全局的版本號,而SVN有
SVN的版本號實際是任何一個相應時間的源代碼快照。而Git并沒有這樣的一個全局版本號,這也是Git缺少的最大的一個特征
Git的內容完整性要優于SVN
Git的內容存儲利用的是SHA-1哈希算法。這能確保代碼內容的完整性,確保在碰著磁盤妨礙和網絡問題時低落對版本庫的粉碎。
Git的根基事情流程如下:
在事情目次中修改某些文件。
對修改后的文件舉辦快照,然后生存到暫存區域。
提交更新,將生存在暫存區域的文件快照永久轉儲到 Git 目次中。
3 Git處事器搭建
1. 情況陳設
系統情況:處事器端:CentOS 6.5 ,ip:192.168.56.1
客戶端:CentOS 6.5 ,ip:192.168.56.101
軟件版本:處事器端:源碼編譯安裝,git-1.9.0.tar.gz
客戶端:yum在線安裝機制
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用戶運行
查察版本號:git --version
git version 1.9.0
安裝gitosis:gitosis為Git用戶權限打點系統,通過打點處事端的/home/git/.ssh/authorized_key文件來執行對用戶權限的打點,是一個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即暗示樂成
2.2 客戶端安裝:
#yum install git
#git --version
git version 1.7.1
3. ssh配置
客戶端出產密鑰并上傳隨處事器端:
#ssh-keygen -t rsa
#scp ~/.ssh/id_rsa.pub [email protected]:~/
處事端查察已經上傳的密鑰:ls ~/id_rsa.pub
4. 處事器上生成git用戶,利用git用戶并初始化gitosis
添加用戶git:
#useradd -r -s /bin/sh -c 'git version control' -d /home/git git
配置權限:
#mkdir -p /home/git
#chown git:git /home/git
在處事器端生成打點庫:
#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的用戶會見權限打點庫,gitosis通過這個git庫來打點所有git庫的會見權限。
2. 通過執行初始化,該公鑰的擁有者就能修改用于設置gitosis的誰人非凡Git客棧了
修改上傳權限:
#chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
5. 客戶端導出打點
#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文件用來配置用戶、客棧和權限的節制文件
keydir目次則是生存所有具有會見權限用戶公鑰的處所
.[email protected]:如前所述,該用戶具有會見權限
6. 客戶端建設及配置打點項目
#cd /git-repo/gitosis-admin
查察已經上傳密鑰
#ls keydir/
[email protected]
授權和權限節制
#vim gitosis.conf
[gitosis]