原文: http://soarlin.pixnet.net/blog/post/42810173-%E4%BD%BF%E7%94%A8-gitolite-%E6%9E%B6%E8%A8%AD-git-server%EF%BC%8C%E4%B8%A6%E5%AE%89%E8%A3%9D-gitweb
總共參考了大約四篇文章的教學,最後總算成功的搞定
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
底下就稍微紀錄一下自己的操作步驟:
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 的設定
- ssh 連線到 Server 上
- sudo -s (切換帳號為root)
- useradd -s /bin/bash -m -G sudo -d /home/git git (建立名為 git 的使用者,並給予 sudo 權限)
- su - git (切換到 git user,以下動作以 git 權限操作)
- 將開發人員的 public key 加入認證檔
- cat /tmp/user1.pub >> ~/.ssh/authorized_keys
- cat /tmp/user2.pub >> ~/.ssh/authorized_keys
- 或是將上一步,每位開發人員 cat 到的 public key 自行增加到 ~/.ssh/authorized_keys 檔案中
建立 Git Repository
- ssh 連線到 Server 上
- su git (切換到 git user,以下動作以 git 權限操作)
- mkdir -p ~/project_name.git
- cd ~/project_name.git
- 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 設定檔位置
|
- 修正 gitweb conf 內容
- sudo vim /etc/apache2/conf-enabled/gitweb.conf
Alias /gitweb /usr/share/gitweb
Options +FollowSymLinks +ExecCGI
AddHandler cgi-script .cgi
|
- 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@
|
- 檢查 repositories 目錄權限可被讀取
- sudo service apache2 restart (重啟 Apache)
- 連線到 http://IP or 網址/gitweb
沒有留言:
張貼留言