gitweb 的架設使用

(最近更新:2024-03-22)

因為有點想要脫離FAANGM的影響(詳見前文),不想要利用GitHub,又想要仿效SourceHut的方式,來用傳統的方式管理專案,但也不想要在另一個網站註冊新帳號,所以就用自架網站和租用的託管主機來安裝。目前使用以下三個工具,以Clo為案例:

  • 共筆MediaWiki:簡介專案、彙整錯誤回報列表、其他相關文件也可以放進去(案例)
  • 郵件論壇(mailing list, Mailman):用來討論程式使用以及回報錯誤用(案例)
  • Nginx伺服器上的GitWeb:來放置、瀏覽並提供他人下載git的repo

因為考慮到其他用戶或出外時的我能夠即時通連錯誤,加上設定mailing list平臺很麻煩,還要和mail transfer agent這種郵件伺服器引擎的安裝打交道,所以使用web hosting託管提供的服務。雖然所提供的Mailman引擎的版本比較老。MediaWiki就用之前的個人維基。

但是比較麻煩的還有gitweb,雖然可以在線上瀏覽repo程式碼庫,但是設定比較麻煩,所以在此記錄下:

設定伺務器端存放 git repo 的資料夾

假設我們的軟體專案名稱是 clo,放置所有的軟體專案的目錄是 /path/to/git,則:

  1. 設定www-data存取,其中user是自己的帳號:chown -R user:www-data /path/to/git

  2. 創立clo目錄,並且建立bare的git repo git init --bare

  3. 增加hook的執行指令:

    1
    2
    3
    4
    cd /pat/to/git/clo/hooks

    cp post-update.sample post-update

安裝設定 gitweb

  1. Debian系發行版安裝方式: sudo apt install gitweb
  2. 設定檔為:/etc/gitweb.conf,修改如下:

$projectroot = "/path/to/git";

$feature變數可以調整功能選項,見介紹:https://git-scm.com/docs/gitweb.conf

設定伺服器

若是要讓其他人能夠用 git clone git.example.com/src/clo 下載程式碼,我nginx設定檔(/etc/nginx/site-available/[設定檔.conf])類似如下:

另外訪客可以用 git.example.com 觀看程式碼,雖然是以前風氣的陽春界面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
server{
server_name git.example.com;
location /index.cgi {
root /usr/share/gitweb/;
include fastcgi_params;
gzip off;
fastcgi_param SCRIPT_NAME $uri;
fastcgi_param GITWEB_CONFIG /etc/gitweb.conf;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}


location /src/ {
alias /path/to/git/;
index index index.htm index.html;
try_files $uri $uri/ =404;

}



location / {
root /usr/share/gitweb/;
index index.cgi;
try_files $uri $uri/ =404;

}

}

如何下載或上傳

  1. 下載方式:git clone git.example.com/src/clo
  2. 上傳方式:
    (1) 加入遠端庫:git remote add dest ssh://user@example.com/path/to/git/clo
    (2) 更新遠端庫:commit 後,輸入git push dest main