萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 建立 SVN 版本庫完整實戰教學:從建倉到權限配置一步到位

環境準備

  • 已安裝 Subversion:yum install subversion / apt install subversion
  • 規劃倉庫根目錄:/home/svn(建議獨立分區/磁碟)
  • 服務運行使用者:svn(建議專用帳號,非 root)

標準建倉流程

1. 建立倉庫目錄結構

mkdir -p /home/svn
chown svn:svn /home/svn

2. 建立專案倉庫

cd /home/svn
svnadmin create ityizhan
chown -R svn:svn ityizhan

3. 配置使用者認證

cd ityizhan/conf
# 編輯 passwd
cat > passwd <<'EOF'
[users]
ituser = itpassword
dev1 = devpass123
admin = adminpass456
EOF

# 設定權限檔案 authz
cat > authz <<'EOF'
[groups]
ityizhan = ituser, dev1
admins = admin

[ityizhan:/]
@ityizhan = rw
@admins = rw
* = r   # 匿名唯讀(可選,建議 = 禁止)
EOF

4. 配置 svnserve.conf

cat > svnserve.conf <<'EOF'
[general]
anon-access = none      # 匿名不可讀
auth-access = write     # 認證用戶可寫
password-db = passwd
authz-db = authz
realm = iTyiZhan SVN Repository
EOF

5. 啟動 svnserve 服務

# 前台測試
svnserve -d -r /home/svn

# 背景常駐(生產環境建議用 systemd)
# 建立 /etc/systemd/system/svnserve.service
[Unit]
Description=Subversion Server
After=network.target

[Service]
Type=forking
User=svn
Group=svn
ExecStart=/usr/bin/svnserve -d -r /home/svn
ExecStop=/usr/bin/killall svnserve
Restart=on-failure

[Install]
WantedBy=multi-user.target

# 啟用
systemctl daemon-reload
systemctl enable --now svnserve

客戶端驗證

# 檢出
svn checkout svn://server_ip/ityizhan --username ituser

# 提交測試
cd ityizhan
echo "test" > test.txt
svn add test.txt
svn commit -m "initial commit"

進階配置與最佳實踐

掛鉤腳本:提交郵件通知/代碼審查觸發

# hooks/post-commit
#!/bin/bash
REPOS="$1"
REV="$2"
/usr/share/subversion/hook-scripts/commit-email.pl "$REPOS" "$REV" -h smtp.example.com dev-team@example.com

記得 chmod +x hooks/post-commit

備份策略

# 熱備份(不鎖定倉庫)
svnadmin hotcopy /home/svn/ityizhan /backup/svn/ityizhan-$(date +%F)

# 增量備份腳本(每日)
svnadmin dump /home/svn/ityizhan -r {$(date -d yesterday +%F)}:HEAD --incremental | gzip > /backup/svn/ityizhan-inc-$(date +%F).dump.gz

遷移與升級

# 完整遷移
svnadmin dump /home/svn/ityizhan > full.dmp
svnadmin load /new/path/ityizhan < full.dmp

# 格式升級
svnadmin upgrade /home/svn/ityizhan

權限模型設計建議

  • 專案級權限:[project:/] 控制整個專案
  • 目錄級權限:[project:/trunk/src] 精細控制模組存取
  • 群組管理:[groups] 定義角色,授權引用群組而非個人
  • 路徑繼承:子目錄繼承父目錄權限,除非顯式覆蓋

常見問題排查

錯誤原因解決
Authorization failedauthz 規則不匹配、大小寫敏感檢查 authz 路徑大小寫、群組名拼寫
Could not open the requested SVN filesystem倉庫路徑錯誤、權限不足確認 -r 參數指向倉庫父目錄、svn 用戶有讀寫權
Repository moved permanently客戶端 URL 缺少尾斜線、Apache 配置重導向統一使用 svn://ip/repo/ 結尾帶斜線
Out of date / Conflict版本衝突svn update 後手動解決衝突再 commit

SVN vs Git 選型提醒

  • 集中式權限控制、大型二進位檔案、單一真實來源需求 → SVN
  • 分散式開發、離線提交、輕量分支合併、開源協作 → Git
  • 現有 SVN 專案可用 git svn 雙向同步漸進遷移

遵循標準化建倉、權限分層、服務化部署、備份驗證流程,即可建立穩定可靠的 SVN 版本控制基礎設施。

copyright © 萬盛學電腦網 all rights reserved