0.簡介
在軟件開發和團隊協作中,代碼管理是至關重要的環節。筆者一直使用gitblit管理自己的倉庫。然鵝,這個軟件已經很久沒有更新了。經過多方考察,發現Gitea 是一款輕量級的開源代碼托管平臺,具有易于部署、資源占用少、功能豐富等特點,非常適合個人開發者或小型團隊在本地搭建自己的代碼倉庫。
本文將詳細介紹如何在安裝了git的Windows 10 操作系統上部署 Gitea 服務器,使用 Gitea 自帶的 SSH 服務器,端口設置為 10022,且不開啟 avatar 服務。
文章目錄
- 0.簡介
- 1. 準備工作
- 2. 安裝與初始化配置
- 2.1. 啟動 Gitea 并生成配置文件
- 2. 停止 Gitea 并修改配置文件
- (1)基本配置
- (2)查看SSH服務器情況
- 2.2. 登入
- 3. 有效地組織倉庫
- 3.1 gitblit和Gitea在倉庫路徑上的一些區別
- 3.2 gitblit 和 gitea的主要區別
- 4. 關于版本控制的好處
- 5. 最重要的事情
1. 準備工作
-
下載 Gitea 安裝包:從 Gitea 官方網站(https://gitea.com/)下載適用于 Windows 系統的最新版本可執行文件(.exe 格式)。
-
創建安裝目錄:在 Windows 10 系統中選擇一個合適的位置創建目錄,例如在 E 盤根目錄下創建 “gitea” 目錄,路徑為
D:\gitea
。
2. 安裝與初始化配置
2.1. 啟動 Gitea 并生成配置文件
將下載好的 Gitea 可執行文件(例如 gitea.exe
)復制到創建好的 D:\gitea
目錄中。打開git bash命令提示符,進入該目錄,執行以下命令啟動 Gitea:
$cd /e/gitea
$ ./gitea-1.23.8-gogit-windows-4.0-amd64.exe
首次啟動后,請打開瀏覽器,進行配置:
注意:
- 為了配置內建SSH選項,暫時把“SSH端口”置空。如果不置空。可能出錯。
- 選擇 Sqlite 作為數據庫,個人足夠了,且是綠色版,可以直接U盤拷貝走。如果要配置PG或者MySQL,則會麻煩一些,且不能放到 U盤里帶走了。
- 點擊“確定”后,要等待一會(30-300秒),就會跳入注冊界面。
- 注冊一個賬號,如admin。
2. 停止 Gitea 并修改配置文件
按下 Ctrl+C
停止 Gitea 服務。接下來需要修改配置文件 app.ini
,以滿足我們的預設環境要求。配置文件路徑為 E:\gitea\custom\conf\app.ini 進行以下修改:
(1)基本配置
參考: https://docs.gitea.com/next/administration/config-cheat-sheet
找到 [server]
部分,修改以下內容:
[server]
SSH_DOMAIN = 192.168.101.100
DOMAIN = 192.168.101.100
HTTP_PORT = 3000
ROOT_URL = http://192.168.101.100:3000/
OFFLINE_MODE = true
# 省略N個配置...#下列選項開啟內建SSH服務,必須加入這個選項
START_SSH_SERVER = true#必須修改這個選項為false
DISABLE_SSH = false#網頁上展示的SSH端口
SSH_PORT = 10022#實際監聽的端口
SSH_LISTEN_PORT = 10022
這里建議采用內建SSH,是因為怕gitea把系統ssh服務的配置給改壞了。一般的像我這樣水平不高的個人用戶,最好是使用內建ssh。在Linux下更要注意,Gitea如果使用系統SSH,會配置相關用戶的.ssh文件夾下的內容。主要與內建SSH相關的配置選項如下:
### DISABLE_SSH: false
當 SSH 功能不可用時禁用該功能。
### START_SSH_SERVER: false
啟用時,使用內置的 SSH 服務器。
### SSH_SERVER_USE_PROXY_PROTOCOL: false
期望內置 SSH 服務器的連接攜帶 PROXY 協議頭。
### BUILTIN_SSH_SERVER_USER: {RUN_USER}
內置 SSH 服務器使用的用戶名。
### SSH_USER: {BUILTIN_SSH_SERVER_USER}
克隆 URL 中顯示的 SSH 用戶名。若設置為 `(DOER_USERNAME)`,則使用當前登錄用戶的用戶名。此選項僅適用于已配置 SSH 反向代理且需要為 Git SSH 克隆使用不同用戶名的高級用戶,大多數用戶應保持為空或修改 `BUILTIN_SSH_SERVER_USER`。
### SSH_DOMAIN: {DOMAIN}
服務器的域名,用于顯示克隆 URL。
### SSH_PORT: 22
克隆 URL 中顯示的 SSH 端口。
### SSH_LISTEN_HOST: 0.0.0.0
內置 SSH 服務器的監聽地址。
### SSH_LISTEN_PORT: {SSH_PORT}
內置 SSH 服務器的端口。
(2)查看SSH服務器情況
再次啟動 gitea,會看到如下兩行:
2025/06/05 13:16:36 modules/ssh/ssh.go:385:Listen() [I] Adding SSH host key: E:\gitea\data\ssh\gitea.rsa
2025/06/05 13:16:36 modules/ssh/init.go:26:Init() [I] SSH server started on :10022
可以看見自動創建了ssh的key,并啟動了服務。用 netstat -na 可以看見 3000端口,10022端口都已經啟動。
netstat -naTCP 0.0.0.0:3000 0.0.0.0:0 LISTENINGTCP 0.0.0.0:10022 0.0.0.0:0 LISTENING
注意,如果你的git的版本很老,這一步可能出錯,原因是 gitea 調用 ssh-keygen時候,路徑名里的"“轉義符的問題,讓路徑里的”"破壞了key的全路徑。此時,只要根據data文件夾里多出來的奇怪長文件名“egitea?ata?sh?itea.rsa”,手工恢復到指定文件夾“E:\gitea\data\ssh”里即可。
2.2. 登入
使用創建的賬戶,登入網頁:
如果能夠順利運行到這里,倉庫就建好了。
3. 有效地組織倉庫
3.1 gitblit和Gitea在倉庫路徑上的一些區別
Gitblit在建立倉庫的時候,會按照用戶輸入的多級路徑來自動歸并倉庫。比如:同樣以user登入,可以直接建立以頂級域名為根的倉庫(和用戶名可以沒關系),且支持多級配置路徑。類似 /opensource/database, /proj2025/simu_test/cargo01 等等,每個路徑下面,可以包含N個倉庫。這種特性特別有利于個人歸攏自己的零碎的小程序。說句實話,如果不是 gitblit 目前更新緩慢,且java發展太快,和gitblit依賴的版本之間的代差越來越大,我是絕對不會遷移的。
Gitea雖然很現代,但是不支持這種配置。默認的倉庫的前綴是和用戶名高度關聯的。這就很要命額。因為作為個人的git倉庫,用戶就我一個人,或者小企業也就幾個人,這種情況下,如果收集的小東西太多,就很混亂了。目前的解決方法:
- 按照功能建立組織。組織名稱就是“數據庫工具”、“網絡工具”、“SDR”、“OpenStreetMap” 等名字,組織成員就一個人,就是筆者。
- 把各個項目建立在組織名下,這樣,前綴就有了一層劃分,如 SDR/spectrum。
- 第二級別劃分,建議采用 class.name的范式,比如 viewer.gqrx,alg.ransac等等。
經過這樣的處理,確保每個大類別里只有10-20個倉庫,就比較清晰了。
3.2 gitblit 和 gitea的主要區別
作為個人用戶本地使用,Gitea 和 Gitblit 相比:
社區活躍度 Gitea勝出。活躍的社區意味著更頻繁的更新、補丁以及更多社區驅動的插件和擴展,能更好地滿足用戶需求和及時修復問題。
綠色安裝與部署,Gitea勝出,作為基于 Go 語言開發的單一二進制文件,個人使用sqlite時,依賴更少,不需要java虛擬機。安裝和部署過程更簡單直接。由于沒有虛擬機, Gitea 對系統資源要求低,能在樹莓派2+TF卡這種低配置設備上運行。而 Gitblit對Java有版本的要求,資源消耗稍微多一些。
用戶界面,Gitblit 勝出。雖然Gitea 提供了更現代、更友好的 web 界面,但我覺得個人使用而言,由于無需pull request和工單這種高級操作,也不需要web hooks,翻到gitblit 導航更直觀、一個屏幕顯示的信息量更全面。 相比之下 Gitea 的界面字很大,很現代,但是用戶體驗不如 Gitblit 好。
功能特性, Gitea更適合現代化開發。Gitea 的敏捷開發支持進步較快, Actions 支持 CI/CD 功能且兼容 GitHub Actions,用戶可采用熟悉的 YAML 格式編寫 workflows 并重用大量已有 Actions 插件,在 CI/CD 方面的支持更現代化和便捷。Gitblit 在這方面的功能更新和集成能力相對較弱。
安全定制性,Gitea略有優勢:Gitea 用戶權限管理更細致,可以設置組織、團隊,控制列表等功能,相比之下 Gitblit 在安全方面配置比較單一。這一點對單用戶來說意義不大。
4. 關于版本控制的好處
個人開發者雖然不總是和別人打交道,但自己使用 Git 也是必要的,主要有以下幾點好處:
一、代碼版本管理更有序
Git 能為每一次代碼修改生成唯一版本號,形成清晰的開發時間線。例如,當你在迭代某個功能時,可能會嘗試多種實現方案,通過 git commit
記錄每版代碼的核心改動(如“優化算法邏輯”“修復內存泄漏”),后續可通過 git log
快速回溯任意階段的代碼狀態。若新功能引入 bug,無需手動恢復文件,直接用 git checkout
切換到穩定版本即可,避免因誤操作導致代碼丟失或混亂,尤其適合長期維護的個人項目。 同時,像我這樣30多年的老園丁,回顧20多年前的時光還是很激動的(我有 Visual Source Safe和SVN歷史庫)。
二、本地協作與實驗更自由
即使不與他人協作,Git 也能在本地構建“虛擬團隊”環境。你可以創建多個分支(如 feature/new-login
hotfix/bug-123
),在獨立分支上安全地測試新想法或修復緊急問題。例如,開發主程序時想嘗試集成新框架,可新建分支隔離實驗代碼,失敗后直接刪除分支,不影響主分支的穩定性。這種“隔離式開發”能大幅降低試錯成本,讓你更敢于探索新技術,提升開發效率。 我見過很多“ZIP”大神,每天打包一次代碼,這種方式不是不可以,但是很容易糊涂。相對而言,版本控制能解決大部分的問題。
三、數據備份與跨設備同步更便捷
Git 的版本庫本質是代碼的完整備份。將本地倉庫同步到遠程(如 GitHub、Gitee 等個人倉庫可以在U盤里或者云服務器),既能防止本地硬盤故障導致數據丟失,又能實現跨設備開發。比如,你在辦公室用臺式機編寫代碼,下班途中用筆記本電腦通過 Git 拉取最新進度繼續開發,無需手動拷貝文件。此外,一些云服務商提供自動備份功能,進一步增強了數據安全性,讓個人開發者無需擔心因設備故障中斷工作。
四、培養專業開發習慣
使用 Git 是遵循行業標準的體現,能幫助個人開發者養成規范化的工作流程。從編寫有意義的提交信息(如“feat: 添加用戶注冊功能”“docs: 更新 README 文檔”)到合理管理分支,這些習慣會滲透到日常開發中,提升代碼質量和項目可維護性。當未來參與團隊協作時,你已熟練掌握 Git 操作,能快速適應企業級開發流程,避免因工具使用問題拖慢進度。
5. 最重要的事情
要給每個組織、每個項目選取一個言簡意賅的名字,以及一個好看直觀的PNG圖標。這樣,每天打開自己的Git網站,就像是來到了自己的后花園,棒極了。