? ? ? ???Gitolite是一款Perl語言開發的Git服務管理工具。通過公鑰對用戶進行認證。并可以通過配置文件對些操作進行基于分支和路徑的精細控制。
Gitolite採用的是SSH協議而且使用SSH公鑰認證。因此不管是管理員還是普通用戶。都須要對SSH有所了解。Gitolite的官網是:https://github.com/sitaramc/gitolite。以下就來細說使用Gitolite搭建Gitserver的過程吧。
? ? ? ? ?硬件需求:Ubuntu電腦(或虛擬機)。正常網絡訪問。
? ? ? ? ?軟件需求:git-core,gitolite, openssh-server, git-daemon-run(ubuntu),msysgit(windows)
? ? ? ? ?在Gitolite的搭建過程中,Gitweb、Apache不是必須的,Gitweb、Apache跟Gitolite一起使用。看到的效果類似于?http://git.chromium.org/gitweb/。
1. 安裝配置Gitserver(IP:10.203.138.129)
???????? 安裝Git和openssh。
?????????$ sudo apt-get install git-core openssh-server
?????????新建用戶git,該用戶作為全部代碼倉庫和用戶權限的管理者。
?????????$ sudo groupadd git
???????? $ sudo useradd git –g git –m
???????? $ sudo passwd git?(須要設置用戶git的password)
2. 下載gitolite
???????? 初始化server的全局設置,為安裝gitolite做準備。
在不論什么一臺機器上使用git。第一次必需要先設置user.name和user.email。
?????????$ git config --global user.name “david”
???????? $ git config --global user.email “david@server-pc”(name和email任意)
???????? 安裝一下python的setup tool。
?????????$ sudo apt-get install python-setuptools
???????? 獲取gitolite包。
?????????$ git clone https://github.com/sitaramc/gitolite.git(或者到網上下載相應的gitolite)
? ? ? ??當然,我們也能夠使用包管理器進行安裝。
? ? ? ??$ sudo aptitude install gitolite
3. 配置gitolite
???????? 在git管理員的PC上,先安裝msysgit(windows系統)。安裝后,打開gitbash。執行例如以下命令生成管理員密鑰:
?????????$ ssh-keygen –t rsa
?????????執行以上命令后。能夠默認提示直接回車。回車后在當前用戶文件夾下生成了.ssh/id_rsa和.ssh/id_rsa.pub。
當中.ssh/id_rsa是私玥,.ssh/id_rsa.pub是公鑰。接下來能夠使用例如以下命令將git管理員的公鑰上傳到gitserver。也能夠直接復制到gitserver。
?????????$ scp xxx/.ssh/id_rsa.pub webgod@10.203.138.129:/tmp/admin.pub
? ? ? ???回到Gitserver上。
?????????$ sudo chmod a+r /tmp/id_rsa.pub
? ? ? ???運行Gitolite安裝。
?????????Initialized empty Git repository in /home/repo/gitolite-admin.git/
Reinitialized existing Git repository in /home/repo/gitolite-admin.git/
?????????Gitolite是通過一個git倉庫來管理配置文件。倉庫放在/home/git/repositories/gitolite-admin.git。
???????? 設置git倉庫權限
?????????$ sudo chown git:git /home/git/repositories
???????? $ sudo chmod 755 /home/git/repositories
???????? $ sudo chmod 755 /home/git/repositories/gitolite-admin.git/hooks/post-update
4. 在server上新建測試項目倉庫
???????? 在server上新建一個空的項目倉庫可。叫“test”。
???????? 切換到git用戶:
?????????$ su – git
???????? $ cd repositories
???????? $ git init --bare test.git
???????? $ exit
?????????到這里,test僅僅是一個空倉庫。它是不能clone下來的。
為了能做clone,必須先讓管理員或有權限的人放一個初始化的版本號到倉庫中。
所以,我們必須先改動一個gitolite-admin。
5. 管理gitolite的配置文件
???????? Gitolite本身的配置也是通過git來實現的。
在剛剛上傳公鑰的機器上,把gitolite-admin.git這個倉庫clone下來,就能夠以管理員的身份改動配置了。
???????? 新建一個目錄,如git129:
?????????$ mkdir git129
???????? $ cd git129
???????? $ git clone git@10.203.138.129:gitolite-admin.git(或使用全路徑)
???????? 注:訪問git用戶倉庫的默認路徑是/home/git/repositories/
?????????$ cd gitolite-admin
?????????該文件夾下的keydir文件夾是用來存放全部須要訪問gitserver的用戶的ssh公鑰。
各個用戶依照前面提到的辦法生成各自的ssh公鑰文件后,把全部人的ssh公鑰文件按名字又一次命名一下,然后復制到keydir文件夾下,然后改動gitolite.conf文件,做對應的配置:
?????????[gitolite]
???????? [group gitolite-admin]
???????? writable = gitolite-admin
???????? members = david@DAVID-PC ?tom@TOM-PC
???????? [group team]
???????? writable = test
???????? members = david@DAVID-PC ?tom@TOM-PC ?pitter@PITTER-PC
?????????這個配置文件表達了例如以下含有:gitolite-admin組成員有david,tom,該組對gitolite-admin倉庫有讀寫權限;test組有david,tom,pitter三個成員,該組對test倉庫有讀寫權限。眼下這些配置文件的改動僅僅是在本地,必須推送到遠程的gitserver上才干真正生效。
???????? 增加新文件、提交并push到Gitserver:
?????????$ git add .
???????? $ git commit –m “add test and someusers”
???????? $ git push origin master
? ? ? ???$ sudo chmod a+r /tmp/id_rsa.pub
6. 初始化測試項目
???????? 如今server搭建完成,而且有一個空的項目test在server上。接下來,須要測試一下,空倉庫是不能clone的。所以須要某個有寫權限的人初始化一個版本號。
在client運行:
?????????$ mkdir test-ori
???????? $ cd test-ori
???????? $ git init?(在client運行,初始化一個本地的版本號庫)
?????????$ echo “/* add something */” > hello.c
???????? $ git add .
???????? $ git commit –m “initial version”
???????? $ git remote add origin git@10.203.138.129:test.git
???????? $ git push origin master
?????????到此為止,test已經有了一個版本號了,team的其它成員僅僅要先clone一下test倉庫就能夠了。并且gitolite.conf中賦予的讀寫權限。
7. 加入已有git項目
???????? 假設想將一個現成的git倉庫,放到Gitserver上供team使用(比方clone了一個官方的kernel倉庫,想在內部使用它作為基礎倉庫)。能夠這樣操作:
???????? 首先須要從你的工作倉庫中得到一個純倉庫。比方你的工作文件夾為~/kernel,你想將該純倉庫復制到Gitserver上使用。Gitserver的管理員拿到這個純倉庫(~/kernel)后,將其復制到/home/repo/下,同一時候配置gitolite相關配置文件。比方說:下載ALSA庫。
?????????$ git clone git://android.git.kernel.org/platform/external/alsa-lib.git
?????????$ git clone git://android.git.kernel.org/platform/external/alsa-utils.git
?????????生成bare庫:
?????????$ git clone --bare alsa-lib alsa-lib.git
???????? $ git clone --bare alsa-utils alsa-utils.git
?????????將bare庫移動到Gitserver文件夾:
?????????$ cp alsa-lib.git /home/repo
? ? ? ???注意變更全部者。以獲取提交權限。
? ? ? ???$ chown -R git alsa-lib.git
8. Gitweb和Git Daemon的支持
盡管git-daemon能夠支持寫操作,但由于git-daemon沒有提供認證支持。因此非常少人會配置git-daemon來提供匿名的寫服務。
使用git-daemon提供的Git版本號庫僅僅讀服務效率非常高。
故,git-daemon一直是Git版本號庫僅僅讀服務的首選。
? ? ? ???假設想使用git協議,那么就須要安裝git-daemon。
?????????$ sudo apt-get install git-daemon-run
?????????編輯git-daemon配置文件:
?????????$ sudo gedit /etc/sv/git-daemon/run
? ? ? ??
?????????#!/bin/bash
???????? exec2>&1
???????? echo‘git-daemon starting.’
???????? execchpst -ugitdaemon
?????????????????? “$(git--exec-path)”/git-daemon --verbose?--export-all--enable=receive-pack --enable=upload-pack --enable=upload-archive?--reuseaddr --base-path=/home/webgod/? ? ??
?????????說明:
???????? --base-path????? 指向Gitserver的根文件夾
???????? --enable=receive-pack
???????? --enable=upload-pack
???????? --enable=upload-archive
???????? 以上三個是與git-clone,git-push。git-pull相關的。
查看詳情使用命令:$ man git-daemon查看。
????????
???????? 重新啟動gitserver:
?????????$ sudo sv restart git-daemon
? ? ? ? ?在Gitserver上:
?????????$ cd /home/webgod
???????? $ mkdir RepoServer
???????? $ cd RepoServer
???????? $ git init --bare manifest.git
????????
?????????切換到其它文件夾:
?????????$ cd ~/test
???????? $ git clonegit://127.0.0.1/RepoServer/manifest.git
?????????(è $ git clone git@127.0.0.1:/home/webgod/RepoServer/manifest.git)
???????? 這里就實現了所謂的“匿名訪問”。