昨天聊到在 Windows 架 Git 私服,留言區大家一面倒狂推 Gitea,力道之強,讓我覺得不試試看會終生遺憾。改變計劃,決定先把矮黑猩猩 (Bonobo Git Server) 放一旁,先來試試 Gitea。

我向來偏好輕巧簡單的解決方案,GitLab 功能強大但太笨重,相較之下,Gitea 更符合我的要求:

  1. 跨平台 - 使用 Go 語言開發,可在 Windows、macOS、Linux 執行
  2. 輕巧 - 在 Raspberry Pi 上都可以跑
  3. 安裝簡便 - 在 Windows 上可用 Chocolatey 安裝(參考),轉成 Windows 服務只需一行指令,或是直接用 Docker 跑更省事
  4. 文件豐富 - 官方文件十分完整,且有不少章節己中文化(但中文版跟英文版有些出入,後面會提到)

雖被定位成「輕量級」,Gitea 的功能卻多到超出我的預期,像是:

  • 同時支援 SSH/HTTP/HTTPS 存取
  • 支援 LDAP/SMTP 認證
  • 有 Issue/Pull Request/Wiki
  • 可選擇 MySQL、PostgreSQL、SQLite 或 MSSQL 作為資料庫
  • 提供 Github、GitLab 匯入功能

評估下來,Gitea 確實是很出色的自架 Git 伺服器選項,那還等什麼,先裝一台起來玩。

既然是試水溫,我選擇最快速最不沾手的做法 - Docker。依據文件說明(註:我發現中文翻譯省略許多,若想看完整資訊建議看英文),準備一個 docker-compose.yml 如下:(ports 部分的 8088 與 222 是對外 HTTP 及 SSH 使用的 TCP 埠號,要依網路環境修改。valumes 的 ./gitea 是用來存放 Git 儲存庫、設定檔的路徑,若是 CentOS 記得要設 chcon -Rt svirt_sandbox_file_t ...設權限)

version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: gitea/gitea:1.13.1
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
    restart: always
    networks:
      - gitea
    volumes:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "8088:3000"
      - "222:22"

使用 docker-compose up -d 執行 Docker 容器,瀏覽器連上 8088 Port,Gitea 網站己經在運轉中了:

第一次啟動前需要初始化,點擊上方選單的【探索】會被帶到設定頁,選擇資料庫(若沒特殊需求,用預設的 SQLite 就夠了),設定網站標題,若 Docker 對映對外 HTTP Port 不是 3000 (本範例為 8088),要將【Gitea 基本 URL】由 http://localhost:3000/ 改成 http://對外IP:對外Port/,其他選項可以用預設值,設定好按下【安裝 Gitea】;

之後便會導向登入畫面,第一位註冊登入帳號的使用者會成為管理者。

Gitea 幾乎復刻了 Github 的操作介面,有用過 Github 就能上手:

客戶端的操作跟 Github/TFS 無異,遇到需要登入時也會彈出 Git Credential Manager 帳號密碼對話框,其他沒什麼特別之處:

簡單試用的感想 - 這根本是在家裡架出一台小 Github 呀! 完全能理解為什麼所有人都大推 Gitea,只裝完試用五分鐘,我也加入 Gitea 推坑團了。相較之下 Bonobo Git Server 的功能陽春許多,唯一的優勢是它用 ASP.NET MVC 開發,想改造的話我能較快上手,但衡量功能性及相關資源,Gitea 是較好的選擇,如真想客製改造,就學點 Golang 吧! (咬牙)

我計劃開始用 Gitea 來管一些小組或個人小專案,未來若有實戰心得再陸續分享。

Introduce to the best choice of private Git server - Gitea.


Comments

# by Jackson2764

Gitea 無法禁止大檔上傳,這會讓 repo 被灌爆... 如果有人惡搞 push 了 20G 的檔案上來怎麼辦?

# by Ramis

Gitea建議是for小組或小團體使用, 基本上不建議對外開放, 所以在人員控管上會比較嚴謹, 你說的問題我覺得不太容易遇到

# by Jackson2764

Tony 前輩謝謝。 ;[repository.upload] ;; Max size of each file in megabytes. Defaults to 50MB ;FILE_MAX_SIZE = 50 ;; Max number of files per upload. Defaults to 5 ;MAX_FILES = 5 這邊的參數,指的是經由瀏覽器(HTTPS)方式上傳,只允許一次上傳5個檔案、單檔50MB。 但是經由指令 git push 推送,檔案大小及數目是未被限制的!

# by AllenRMP

gitea 若發生pull request衝突 該如何處理呢 網頁介面上似乎沒有像github有解決衝突的按鈕可選

Post a comment