最近因為工作需求需要安裝git server給大家使用,
但小弟實在是linux菜鳥,(根本是原因linux人員離職,才頂上的...
於是乎上網找了教學,雖然有官網的教學,但我覺得連安裝畫面都不太一樣...好了,廢話不多說!
- 安裝
首先為何要使用Git + Gitolite/Gitosis + Gitweb,Git明顯是當前版控最理想的免費軟體,分散控管的特性更勝SVN一籌,
Gitolite是從gitosis而來,擁有更好的介面與更細微管理,Gitweb能讓browser檢視git repository方便一些人員使用。
Gitolite與Gitosis擇一安裝,以下兩種都有安裝教學,但我最後用Gitosis。
先修改/etc/hosts與/etc/sysconfig/network伺服器名稱。
- Git
先準備好ssh的公私鑰對,先見管理一開始的部分有說明如何建金鑰對。
使用root作以下操作
套件安裝
yum -y install git-core git httpd perl-Time-HiRes
新增使用者(密碼:gitpw)
useradd git
passwd git
usermod -u 600 git
groupmod -g 600 git
- Gitolite
複製公鑰到git server /home/git/後,修改擁有者
chown git:git /home/git/id_rsa.pub
注意在設定gitolite.conf中的使用者名稱需要對應公鑰名稱
su -l git
切換目錄(預設)
cd /home/git
clone github上的gitolite專案
git clone git://github.com/sitaramc/gitolite
建立bin folder
mkdir -p /home/git/bin
執行安裝,並在/bin中建立link,-in參數預設會在$HOME/bin,也就是/home/git/bin
gitolite/install –ln
設定gitolite的環境,指定pubkey,如此一來git就是管理者
gitolite setup -pk id_rsa.pub
首次安裝gitolite結構,pubkey或admin是必需的
切換回使用者root
exit
檢查suexec的參數,主要為AP_DOC_ROOT和AP_LOG_EXEC
suexec –V
-D AP_DOC_ROOT="/var/www"
-D AP_LOG_EXEC="/var/log/httpd/suexec.log"
假定如上,而cgi只能在/var/www下執行,故建立bin目錄並授權
install -d -m 0755 -o git -g git /var/www/bin
建立.sh檔,以切換執行者
vi /var/www/bin/gitolite-suexec-wrapper.sh
export GIT_PROJECT_ROOT="/home/git/repositories"
export GITOLITE_HTTP_HOME="/home/git"
exec ${GITOLITE_HTTP_HOME}/gitolite/src/gitolite-shell
修改權限
chown -R git:git /var/www/bin
chmod 750 /var/www/bin/gitolite-suexec-wrapper.sh
chmod 755 /var/www/bin
修改UMASK
vi /home/git/.gitolite.rc
UMASK => 0027
- Gitosis
安裝python套件
sudo yum install python-setuptools –y
下載gitosis repository
cd ~
git clone https://github.com/tv42/gitosis.git
cd gitosis
安裝gitosis
sudo python setup.py install
初始化Gitosis,先複製公鑰到git server /tmp/
sudo -H -u git gitosis-init < /tmp/id_rsa.pub
確保使用者git權限
sudo chmod 700 /home/git
sudo chmod 700 /home/git/.ssh
sudo chmod 600 /home/git/.ssh/authorized_keys
- GitWeb (配合gitolite)
使用root作以下操作
安裝,默認會安裝在/var/www/git
yum install gitweb –y
移動網站目錄,參考網站教學設定,可依自己的配置
mv /var/www/git /var/www/html/gitweb
chown -R git:git /var/www/html/gitweb
修改/etc/gitweb.conf
vi /etc/gitweb.conf
our $projectroot = "/home/git/repositories/";
our $projects_list = "/home/git/projects.list";
$projectroot設定為git repository的絕對路徑
修改/var/www/html/gitweb/gitweb.cgi
vi /var/www/html/gitweb/gitweb.cgi
our $projectroot = "/home/git/repositories";
our $projects_list = "/home/git/projects.list";
建立一個假的目錄讓apache存取
install -d -m 0755 -o apache -g apache /var/www/git
配置Apache /conf/httpd.conf 與 /conf.d/git.conf
vi /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ServerName git.mypay.com
ServerAlias gitserver
ServerAdmin mis@mypay.com
DocumentRoot /var/www/git
<Directory /var/www/git>
Options None
AllowOverride none
Order allow,deny
Allow from all
</Directory>
SuexecUserGroup git git
ScriptAlias /git/ /var/www/bin/gitolite-suexec-wrapper.sh
ScriptAlias /gitmob/ /var/www/bin/gitolite-suexec-wrapper.sh
<Location /git>
AuthType Basic
AuthName "Git Access"
Require valid-user
AuthUserFile /etc/httpd/conf/git.passwd
</Location>
</VirtualHost>
vi /etc/httpd/con.d/git.conf
Alias /gitweb /var/www/html/gitweb
<Directory /var/www/html/gitweb>
Options +ExecCGI
AddHandler cgi-script .cgi
DirectoryIndex gitweb.cgi
</Directory>
<Location /gitweb>
AuthType Basic
AuthName "Git Access"
Require valid-user
AuthUserFile /etc/httpd/conf/git.passwd
</Location>
Alias 和 Directory改成移動後的位置
增加Apache授權帳號(密碼:gitpw)
htpasswd -c /etc/httpd/conf/git.passwd admin
- Gitweb(配合gitosis)
使用root作以下操作
安裝gitweb
yum install gitweb –y
變更擁有者git
chown -R git:git /var/www/git
$projectroot = "/var/www/git"
修改/etc/httpd/conf.d/git.conf
vi /etc/httpd/conf.d/git.conf
Alias /git /var/www/git
<Directory /var/www/git>
Allow from all
AllowOverride all
Order allow,deny
Options +ExecCGI
AddHandler cgi-script .cgi
DirectoryIndex gitweb.cgi
SetEnv GITWEB_CONFIG /etc/gitweb.conf
Dav On
RewriteEngine Off
設定軟連結
ln -s /home/git/repositories/test_repo.git /var/www/git/
- Others
其他設定,如Apache、iptables、SELinux。
gitweb測試url
http://ip/gitweb/ or http://ip/git/
(教學是這樣,但都gitweb的部分都找不到repositories看來是卡在盲腸了Orz)
管理(使用者、權限)
雖然gitweb以失敗告終,但主要能管理就好了,web什麼的let it go...
無論gitosis或gitolite都是在git server內建立一個repository來管理所有的使用者和repositories的關係。
要增加一名使用者,首先要有金鑰對,以下利用Git Bash建立公私鑰,
輸入ssh_keygen –t rsa –C “userid@maildomain”,金鑰檔名以userid@maildomain表示,但不要輸入密碼,這樣使用上不用一直打密碼,太麻煩。
當然也可以利用PuTTYgen來產生金鑰對,此處的金鑰非openssh,與Git Bash有所差異。
可以利用PuTTYgen的conversions轉換,有了金鑰對後,以下分別說明,gitolite與gitosis的管理方式。
- Gitotile
首先將gitolite-admin從git server clone下來,作為平常管理使用。
開啟Git Bash
切換到你希望的目錄下,輸入git clone git@ip:gitolite-admin.git
管理keydir內的公鑰就是管理git的帳號。
編輯conf/gitolite.conf就是管理帳號與repositories的關係
gitolite.conf如下,
repo gitolite-admin
RW+ = git-admin
repo testing
RW+ = @all
新增repo repository_name,就會新增repository,
R = userid代表該userid可讀取repository_name,
WR = userid代表該userid可讀寫repository_name,
WR+ = userid代表該userid可讀寫刪repository_name,
@all代表所有的使用者,
@符號代表群組可以在檔案中設定,並且可針對使用者也可針對本版庫。
最後使用git tortoise commit and push.
或指令
git add .
git commit -m 'message'
git push origin master
同步到git server上。
- Gitosis
首先將gitosis-admin從git server clone下來,作為平常管理使用。
使用Git Bash輸入git clone git@ip:gitosis-admin.git
管理keydir內的公鑰就是管理git的帳號。
編輯conf/gitosis.conf就是管理帳號與repositories的關係
gitosis.conf如下,
[gitosis]
[group gitosis-admin]
members = git-admin@mypay.tw
writable = gitosis-admin
此檔內的members名稱與對應到keydir的檔名。
最後使用git tortoise commit and push.
或指令
git add .
git commit -m 'message'
git push origin master
同步到git server上。
如果你不在意gitweb,接下來可以使用了....哈哈。(有空再研究吧)
參考網站
官網
https://git-scm.com/book/zh-tw/v1/%E4%BC%BA%E6%9C%8D%E5%99%A8%E4%B8%8A%E7%9A%84-Git-GitWeb
中文
http://eric0806.blogspot.tw/2014/05/ubuntu-git-server-for-small-team-who-use-windows-os.html
英文
Gitolite權限設定
http://blog.crboy.net/2012/06/gitolite-settings-and-managements.html
TortoiseGit金鑰使用