总共参考了大约四篇文章的教学,最后总算成功的搞定
1. Linux 架设使用 SSH 共享存取的 Git Server
2. Linux 使用 Gitolite 架设 Git Server
3. [Linux] 使用 Git + Gitolite + Gitweb 架设 Git Server @ Ubuntu 12.04
4. Install git/gitolite/gitweb on Ubuntu 14.04

  底下就稍微纪录一下自己的操作步骤:

第一步,在 Linux 环境下架设共享存取的 Git Server

系统套件安装
  • sudo -s (切换帐号为root)
  • apt-get install git git-core
协同开发人员产生 SSH public key
  • mkdir .ssh
  • cd .ssh
  • ssh-keygen 
  • cat ~/.ssh/id_rsa.pub  or 上传到 Server /tmp/目录下统一保存
Git Server 的设定
  1. ssh 连线到 Server 上
  2. sudo -s (切换帐号为root)
  3. useradd -s /bin/bash -m -G sudo -d /home/git git (建立名为 git 的使用者,并给予 sudo 权限)
  4. su - git (切换到 git user,以下动作以 git 权限操作)
  5. 将开发人员的 public key 加入认证档
  6. cat /tmp/user1.pub >> ~/.ssh/authorized_keys
  7. cat /tmp/user2.pub >> ~/.ssh/authorized_keys
  8. 或是将上一步,每位开发人员 cat 到的 public key 自行增加到 ~/.ssh/authorized_keys 档案中

 

建立 Git Repository

 

  1. ssh 连线到 Server 上
  2. su git (切换到 git user,以下动作以 git 权限操作)
  3. mkdir -p ~/project_name.git
  4. cd ~/project_name.git
  5. git init --bare --shared

 

 

 

开发人员 clone 程式码

 

  • git clone git@<网址 or IP>:/home/git/project_name.git

 

  以上作法是最基本的以 git 帐号来建立 Git Server,优点是适合人少的专案,架设步骤简单快速;缺点是无法针对不同专案给予不同开发者存取权限,所以需要往下一步
 

第二步,使用 Gitolite 管理 Git Server

 

系统套件安装
  • apt-get install gitolite
 
产生/收集 SSH Public Key
  • ssh 连线到 Server 上
  • su - git (切换到 git user,以下动作以 git 权限操作)
  • cd .ssh (若没有该目录,请先自行建立)
  • ssh-keygen -t rsa -f admin (产生名为 admin 的 public key)
  • 请所有人将各自的 public key 放到 /tmp/ 下,并且已各自名称命名 (e.g. alex.pub, ben.pub, john.pub …)
  • 请注意,这里有别于第一步是将开发人员的 public key 通通加入 authozied_keys 内,如果之后想改用 Gitolite 来控制,可以先把 authozied_keys 另行更名备份,避免与接下来安装步骤有抵触
 
Gitolite Server 架设
  • ssh 连线到 Server 上
  • su - git (切换到 git user,以下动作以 git 权限操作)
  • gl-setup ~/.ssh/admin.pub (汇入管理者的 Public key)
  • 这里是将 git 这个帐号当作 Gitolite 的管理者,所以后续管理 repository 主要也是透过 git 这个帐号来管理
.
├── .gitolite/
├── .gitolite.rc
├── repositories/
│   ├── gitolite-admin.git
│   └── testing.git
├── .ssh
├── .vim
└── .vimrc

 

这时 git 帐号的 $HOME(家目录)下,会产生

 

  • .gitolite/ 目录
  • repositories/ 目录
  • .gitolite.rc 设定档

 

 
repositories/ 目录下,有两个专案

 

  • gitolite-admin.git (用来管理所有专案的主要专案)
  • testing.git (测试用专案)

 

 

建立专案
因为gitolite的专案管理,是透过在主专案(gitolite-admin.git)里,改写 config 档案来设定,所以需要以管理者帐号
(刚刚使用 git 帐号,因为产生的 admin.pub,被设定为 gitolite 管理者的认证)
  • ssh 连线到 Server 上
  • su - git (切换到 git user,以下动作以 git 权限操作)
  • git clone git@localhost:gitolite-admin.git (抓主专案来修改设定)
  • cd gitolite-admin/
  • vim conf/gitolite.conf

 

范例:增加一个名为 ios_test 的专案,并设定 alex 为可存取的使用者,john 为可读,加入以下几行到 conf 档中
※ 这边需要先加入开发人缘,可以先参考下方教学来加入开发人缘

 

repo    ios_test
        RW      =   alex
        R       =   john

 

  • 修改完毕后,以一般 git 上 code 的流程处理
  • git add .
  • git commit -m "add ios_test project"
  • git push

 

顺利的话,可以看到画面上出现类似下面,建立 project 的讯息

 

Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 423 bytes | 0 bytes/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: creating ios_test...
remote: Initialized empty Git repository in /home/git/repositories/ios_test.git/
remote:
To git@localhost:gitolite-admin.git
   a37d282..62dffa9  master -> master
 
加入开发人员
在主专案中,加入开发人员的 public key 档
  • ssh 连线到 Server 上
  • su - git (切换到 git user)
  • cd gitolite-admin/
  • cp -r /tmp/*.pub keydir/ (将之前收集的pub档,复制到keydir目录下)
  • git add -A
  • git commit -m "add developers public key"
  • git push

 

第三步,安装 Gitweb 并整合 Gitolite

系统套件安装
  • sudo apt-get install gitweb apache2
  • sudo usermod -a G git www-data (将 www-data 使用者加入git group)
 
Apache 2.4 与 Gitweb 设定
gitweb 安装后,产生的设定是 Apache 2.2 的设定写法,所以在2.4版需要做些修正
  • 调整 gitweb 设定档位置
  • sudo cp /etc/apache2/conf.d/gitweb /etc/apache2/conf-available/gitweb.conf
  • cd /etc/apache2/conf-enabled
  • sudo ln -s ../conf-available/gitweb.conf
 
  • 修正 gitweb conf 内容
  • sudo vim /etc/apache2/conf-enabled/gitweb.conf
Alias /gitweb /usr/share/gitweb
 
<Directory /usr/share/gitweb>
  Options +FollowSymLinks +ExecCGI
  AddHandler cgi-script .cgi
</Directory>
 
  • sudo a2enmod cgi (Apache 载入 cgi model)
  • sudo service apache2 restart

 

 
修正 Gitweb conf

 

  • sudo vim /etc/gitweb.conf , 修改下列黑字,增加蓝字

 

$projectroot = "/home/git/repositories";
# Syntax highlighting
$feature{'highlight'}{'default'} = [1];
# 提供系统 loadavg check,若系统繁忙,逛 gitweb 只会看到 503 - The load average on the server is too high 讯息
$masload = 500;
$projects_list = $projectroot; # unmark this line
 
修正 Gitolite 部分
  • ssh 连线到 Server 上
  • su - git (切换到 git user)
  • vim .gitolite.rc
$REPO_UMASK = 0027; # change this value
$WEB_INTERFACE = "gitweb”;  # unmark this line
$GL_GITCONFIG_KEYS = "gitweb.owner gitweb.description .*”;   # change this value
 
建立专案设定档修改部分 gitolite-admin/conf/gitolite.conf
  • 将所有专案加入 gitweb 与 daemon 两个帐户的读取权限,才能让 gitweb 读取到专案资料
  • 原有的专案可以添加一些资讯,来透过 gitweb 显示出来

 

加入部分
repo    @all
        R       =   gitweb daemon
 
专案描述部份
repo    testing
        RW+     =   @all
    config gitweb.owner         = "Project Owner Name"
    config gitweb.description   = "Project brief description"
    config gitweb.url           = git@<IP or 网址>:testing.git
 
  • 检查 repositories 目录权限可被读取
  • sudo service apache2 restart (重启 Apache)
  • 连线到 http://IP or 网址/gitweb
 

 

 

 

相关文章