在 Linux 環境下架設 Git Server 參考資料
系統套件安裝 sudo -s (切換帳號為root) apt-get install git git-core
協同開發人員產生 SSH public key mkdir .ssh cd .sshssh-keygen cat ~/.ssh/id_rsa.pub
Git Server 的設定
ssh 連線到 Server 上
sudo -s
(切換帳號為root)
useradd -s /bin/bash -m -d /home/git git
(建立名為 git 的使用者)
passwd git
(替 git 建立密碼,與開啟 sudoer 權限)
visudo
su - git
(切換到 git user,以下動作以 git 權限操作)
將開發人員的 public key 加入認證檔
cat /tmp/user1.pub >> ~/.ssh/authorized_keys cat /tmp/user2.pub >> ~/.ssh/authorized_keys
建立 Git Repository
ssh 連線到 Server 上
切換到 git user,以下動作以 git 權限操作
su git mkdir -p ~/project_name.git cd ~/project_name.gitgit init --bare --shared
開發人員 clone 程式碼 git clone git@<網址 or IP>:/home/git/project_name.git
以上作法是最基本的以 git 帳號來建立 Git Server,優點是適合人少的專案,架設步驟簡單快速;缺點是無法針對不同專案給予不同開發者存取權限,所以需要往下一步
使用 Gitolite 管理 Git Server 參考資料一 參考資料二
系統套件安裝
產生/收集 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 …)
Gitolite Server 架設
ssh 連線到 Server 上
su - git (切換到 git user,以下動作以 git 權限操作)
gl-setup ~/.ssh/admin.pub (匯入管理者的Public key)
目錄結構如下:
. ├── .gitolite/ ├── .gitolite.rc ├── repositories/ │ ├── gitolite-admin.git │ └── testing.git ├── .ssh ├── .vim └── .vimrc
這時 git 帳號的 $HOME(家目錄)下,會產生
.gitolite/ 目錄
.gitolite.rc 設定檔
repositories/ 目錄
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 repo ios_test RW = esu R = soar
修改完畢後,以一般 git 上 code 的流程處理
git add . git commit -m "add new 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 cd gitolite-admin/cp -r /tmp/*.pub keydir/ git add -A git commit -m "add developer public key" git push
安裝 Gitweb 並整合 Gitolite 參考資料
系統套件安裝 sudo apt-get install gitweb apache2 sudo usermod -a G git www-data
Apache 2.4 與 Gitweb 設定 gitweb 安裝後,產生的設定是 Apache 2.2 的設定寫法,所以在2.4版需要做些修正
sudo cp /etc/apache2/conf.d/gitweb /etc/apache2/conf-available/gitweb.conf cd /etc/apache2/conf-enabledsudo ln -s ../conf-available/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>
Apache 載入 cgi model sudo a2enmod cgi
重啟 Apache Server sudo service apache2 restart
修正 Gitweb conf sudo vim /etc/gitweb.conf $projectroot = "/home/git/repositories" ;$feature {'highlight' }{'default' } = [1];$masload = 500;$projects_list = $projectroot ;
修正 Gitolite 部分
ssh 連線到 Server 上
su - git (切換到 git user)
vim .gitolite.rc
$REPO_UMASK = 0027; $WEB_INTERFACE = "gitweb”; # unmark this line $GL_GITCONFIG_KEYS = " gitweb.owner gitweb.description .*”;
建立專案設定檔修改部分 gitolite-admin/conf/gitolite.conf
將所有專案加入 gitweb 與 daemon 兩個帳戶的讀取權限,才能讓 gitweb 讀取到專案資料
原有的專案可以添加一些資訊,來透過 gitweb 顯示出來
repo @all R = gitweb daemon repo testing RW+ = @all config gitweb.owner = "Sagacity Tech. Co., Ltd." config gitweb.description = "This is test repository" config gitweb.url = git@<IP or 網址>:testing.git
檢查 repositories 目錄權限可被讀取
sudo service apache2 restart
(重啟 Apache)
連線到 http://IP or 網址/gitweb