Ubuntu下搭建Git服務(wù)器,并同步部署到服務(wù)器上

一、安裝git服務(wù)器所需軟件

終端輸入以下命令:

lzn@lzn-ThinkPad-E420:~$?sudo?apt-get?install?git-core?openssh-server?openssh-client??python-setuptools??

lzn@lzn-ThinkPad-E420:~$ sudo apt-get install git-core openssh-server openssh-client? python-setuptools

git-core: git核心軟件;

openssh-server和openssh-client:git通過ssh協(xié)議在服務(wù)器與客戶端之間進(jìn)行數(shù)據(jù)傳輸;

python-setuptools:gitosis依賴;

接下來準(zhǔn)備安裝gitosis

安裝gitosis之前需要初始化服務(wù)器的git用戶信息,這個(gè)隨便填。

lzn@lzn-ThinkPad-E420:~$?git?config?--global?user.name?"myname"?????

lzn@lzn-ThinkPad-E420:~$?git?config?--global?user.email?"******@gmail.com"??

lzn@lzn-ThinkPad-E420:~$ git config --global user.name "myname"?

lzn@lzn-ThinkPad-E420:~$ git config --global user.email "******@gmail.com"

安裝gitosis.gitosis主要是給用戶授權(quán).通過以下命令獲取gitosis版本文件

ubuntu:~$?git?clone?https://github.com/res0nat0r/gitosis.git??

ubuntu:~$ git clone https://github.com/res0nat0r/gitosis.git

注意:中間有兩個(gè)是數(shù)字零

獲取gitosis文件后,進(jìn)入到文件目錄下面

ubuntu:~$?cd?gitosis/????

ubuntu:~$ cd gitosis/?

接著使用python命令安裝目錄下的setup.py的python腳本進(jìn)行安裝

ubuntu:~/gitosis$?sudo?python?setup.py?install???

ubuntu:~/gitosis$ sudo python setup.py install

到這里,整個(gè)安裝步驟就完成了,下面就開始對(duì)git進(jìn)行一些基本的配置。

二、創(chuàng)建git管理員賬戶、配置git

創(chuàng)建一個(gè)賬戶(git)作為git服務(wù)器的管理員,可以管理其他用戶的項(xiàng)目權(quán)限。

ubuntu:~/gitosis$?sudo?useradd?-m?git????

ubuntu:~/gitosis$?sudo?passwd?git???

ubuntu:~/gitosis$ sudo useradd -m git?

ubuntu:~/gitosis$ sudo passwd git

然后再/home目錄下創(chuàng)建一個(gè)項(xiàng)目倉(cāng)庫(kù)存儲(chǔ)點(diǎn),并設(shè)置只有g(shù)it用戶擁有所有權(quán)限,其他用戶沒有任何權(quán)限

ubuntu:/tmp/gitosis$?sudo?mkdir?/home/gitrepository????

ubuntu:/tmp/gitosis$?sudo?chown?git:git?/home/gitrepository/????

ubuntu:/tmp/gitosis$?sudo?chmod?700?/home/gitrepository/???

ubuntu:/tmp/gitosis$ sudo mkdir /home/gitrepository?

ubuntu:/tmp/gitosis$ sudo chown git:git /home/gitrepository/?

ubuntu:/tmp/gitosis$ sudo chmod 700 /home/gitrepository/

由于gitosis默認(rèn)狀態(tài)下會(huì)將倉(cāng)庫(kù)放在用戶的repositories目錄下,例如git用戶的倉(cāng)庫(kù)地址默認(rèn)在

/home/git/repositories/目錄下,這里我們需要?jiǎng)?chuàng)建一個(gè)鏈接映射。讓他指向我們前面創(chuàng)建的專門用于存放項(xiàng)目的倉(cāng)庫(kù)目錄/home/gitrepository。

lzn@lzn-ThinkPad-E420:~$?su?-?git??

git@lzn-ThinkPad-E420:~$?sudo?ln?-s?/home/gitrepository?/home/git/repositories????

lzn@lzn-ThinkPad-E420:~$ su - git

git@lzn-ThinkPad-E420:~$ sudo ln -s /home/gitrepository /home/git/repositories?

這里我將在服務(wù)器端生成ssh公鑰,如果想在其他機(jī)器上管理也可以在其他機(jī)器上生成一個(gè)ssh的公鑰。

git@lzn-ThinkPad-E420:~$?ssh-keygen?-t?rsa????

git@lzn-ThinkPad-E420:~$ ssh-keygen -t rsa?

這里會(huì)提示輸入密碼,我們不輸入直接回車即可。

然后用剛生成公鑰id_rsa.pub來對(duì)gitosis進(jìn)行初始化。

git@lzn-ThinkPad-E420:~$?gitosis-init?<?~/.ssh/id_rsa.pub??

git@lzn-ThinkPad-E420:~$ gitosis-init < ~/.ssh/id_rsa.pub


出現(xiàn)如上信息說明gitosis已經(jīng)初始化成功。

gitosis主要是通過gitosis-admin.git倉(cāng)庫(kù)來管理一些配置文件的,如用戶權(quán)限的管理。這里我們需要對(duì)其中的一

個(gè)post-update文件添加可執(zhí)行的權(quán)限。

sudo?chmod?755?/home/gitrepository/gitosis-admin.git/hooks/post-update??

sudo chmod 755 /home/gitrepository/gitosis-admin.git/hooks/post-update

三、服務(wù)器上創(chuàng)建項(xiàng)目倉(cāng)庫(kù)

使用git賬戶在服務(wù)器上創(chuàng)建一個(gè)目錄(mytestproject.git)并初始化成git項(xiàng)目倉(cāng)庫(kù)。

ubuntu:/home/git$?su?-?git????

ubuntu:/home/git$?cd?/home/gitrepository????

ubuntu:/home/git/repositories$?mkdir?mytestproject.git????

ubuntu:/home/git/repositories$ cd mytestproject.git? ??

ubuntu:/home/gitrepositories/mytestproject$ git?init?--bare? ?

新建的這個(gè)倉(cāng)庫(kù)暫時(shí)還是空的,不能被客戶端clone,還需要對(duì)gitosis進(jìn)行一些配置操作。

四、使用gitosis管理用戶操作項(xiàng)目的權(quán)限

首先需要在前面生成ssh公鑰(用來初始化gitosis)的機(jī)器上將gitosis-admin.git的倉(cāng)庫(kù)clone下來。

在客戶端機(jī)器上新建一個(gè)目錄用于存放gitosis-admin.git倉(cāng)庫(kù)

ubuntu:~$?mkdir?gitadmin????

ubuntu:~$?cd?gitadmin/????

ubuntu:~/gitadmin$?git?clone?git@192.168.1.106:repositories/gitosis-admin.git???

? ? ubuntu:~$ mkdir gitadmin?

? ? ubuntu:~$ cd gitadmin/?

? ? ubuntu:~/gitadmin$ git clone git@192.168.1.106:repositories/gitosis-admin.git

clone正確會(huì)顯示一下信息


clone下來會(huì)有一個(gè)gitosis.conf的配置文件和一個(gè)keydir的目錄。gitosis.conf用于配置用戶的權(quán)限信息,

keydir主要用戶存放ssh公鑰文件(一般以“用戶名.pub”命名,gitosis.conf配置文件中需使用相同用戶名),用

于認(rèn)證請(qǐng)求的客戶端機(jī)器。

現(xiàn)在讓需要授權(quán)的用戶使用前面的方式各自在其自己的機(jī)器上生成相應(yīng)的ssh公鑰文件,管理員把他們分別按用戶名

命名好,復(fù)制到keydir目錄下。

ubuntu:~$?cp?/home/aaaaa/Desktop/zhangsan.pub?/home/aaaaa/gitadmin/gitosis-admin/keydir/????

ubuntu:~$?cp?/home/aaaaa/Desktop/lisi.pub?/home/aaaaa/gitadmin/gitosis-admin/keydir/????

? ? ubuntu:~$ cp /home/aaaaa/Desktop/zhangsan.pub /home/aaaaa/gitadmin/gitosis-admin/keydir/?

? ? ubuntu:~$ cp /home/aaaaa/Desktop/lisi.pub /home/aaaaa/gitadmin/gitosis-admin/keydir/?

繼續(xù)編輯gitosis.conf文件

[gitosis]

[group gitosis-admin]

####管理員組

members = charn@ubuntu

####管理員用戶名,需要在keydir目錄下找到相應(yīng)的.pub文件,多個(gè)可用空格隔開(

下同)

writable = gitosis-admin

####可寫的項(xiàng)目倉(cāng)庫(kù)名,多個(gè)可用空格隔開(下同)

[group testwrite]

####可寫權(quán)限組

members =

zhangsan####組用戶

writable = mytestproject

####可寫的項(xiàng)目倉(cāng)庫(kù)名

[group testread]####只讀權(quán)限組members =lisi####組用戶readonly= mytestproject####只讀項(xiàng)目倉(cāng)庫(kù)名

因?yàn)檫@些配置的修改只是在本地修改的,還需要推送到服務(wù)器中才能生效。

ubuntu:~/gitadmin/gitosis-admin$?git?add?.? ??

ubuntu:~/gitadmin/gitosis-admin$?git?commit?-am?"add?a?user?permission"????

ubuntu:~/gitadmin/gitosis-admin$?git?push?origin?master????

? ? ubuntu:~/gitadmin/gitosis-admin$ git add .?

? ? ubuntu:~/gitadmin/gitosis-admin$ git commit -am "add a user permission"?

? ? ubuntu:~/gitadmin/gitosis-admin$ git push origin master?

推送成功會(huì)顯示下面提示信息


新增的用戶不能立即生效,這時(shí)候需要重新啟動(dòng)一下sshd服務(wù)

ubuntu:~/gitadmin/gitosis-admin$?sudo?/etc/init.d/ssh?restart??

ubuntu:~/gitadmin/gitosis-admin$ sudo /etc/init.d/ssh restart

現(xiàn)在,服務(wù)端的git就已經(jīng)安裝和配置完成了,接下來就需要有權(quán)限的組成員在各自的機(jī)器上clone服務(wù)器上的相應(yīng)

項(xiàng)目倉(cāng)庫(kù)進(jìn)行相應(yīng)的工作了。

五、客戶端(linux)使用git

在終端執(zhí)行如下命令:

$?mkdir?testgit????

$?cd?testgit????

$?git?init????

$?echo?"this?is?a?test?text?file,will?push?to?server">?hello.txt????

$?git?add?.????

$?git?commit?-am?"init?a?base?version,add?a?first?file?for?push?to?server"????

$?git?remote?add?origin?git@serverip:repositories/mytestproject.git????

$?git?push?origin?master???

? ? $ mkdir testgit?

? ? $ cd testgit?

? ? $ git init?

? ? $ echo "this is a test text file,will push to server" > hello.txt?

? ? $ git add .?

? ? $ git commit -am "init a base version,add a first file for push to server"?

? ? $ git remote add origin git@serverip:repositories/mytestproject.git?

? ? $ git push origin master

這樣服務(wù)端就創(chuàng)建好了一個(gè)mytestproject.git的倉(cāng)庫(kù)的基礎(chǔ)版本了,現(xiàn)在其他組員只要從服務(wù)端進(jìn)行clone就可以

了。

添加了相關(guān)權(quán)限的用戶可以執(zhí)行如下命令:

$?git?clone?git@serverip:repositories/mytestproject.git????

? ? $ git clone git@serverip:repositories/mytestproject.git?

就可以把項(xiàng)目clone到本地倉(cāng)庫(kù)了。

下面進(jìn)行簡(jiǎn)單的修改和提交操作

$?cd?mytestproject????

$?echo?"this?is?another?text?file?created?by?other">another.txt????

$?git?add?.????

$?git?commit?-am?"add?a?another?file?by?other"????

$?git?push?origin?master????

六、通過hooks部署代碼到服務(wù)器

進(jìn)入項(xiàng)目

# cd /home/www/project.git/hooks

# vim post-receive

#!/bin/sh

#PATH=$PATH:/usr/local/python27/binGIT_WORK_TREE=/home/www/newproject git checkout -f

cd/home/www/newproject && make html >/dev/null 2>&1

cd/home/www/newproject && make html >/dev/null 2>&1

然后將post-receive改為可執(zhí)行,更改文件所有者

chmod +x post-receive

chown git:git -R /home/www/newproject

感謝http://blog.csdn.net/iron_lzn/article/details/53009733

感謝http://www.itdecent.cn/p/5c7ce1b02100

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容