但是使用者一多,就要另外收費,對於小公司來說也是一筆負擔,
於是想到利用 NAS 架設 GIT,再將資料同步到 DevOps 當成備援,
萬一 NAS 掛了,還可以由 DevOps 上還原回來,
公司也不用額外購買相關硬體備份,
所以我利用 QNap NAS 的 Docker 功能 Contaniner Station ,建立 Gitea 的容器,
再利用 Gitea 的 WebAPI 功能開發一個工具,幫忙建立多個全新的 GIT 資料倉,
幸好有前人寫了 .NET 版的 Gitea.API for .NET DLL 可以直接拿來用
二話不說先抓下來開發小工具,
有興趣的可以自行下載 程式碼
開發環境為 C# VS2019 .NET 4.5 , 參考元件 Gitea.API.DLL V 1.0.1.0
根據先前寫的 Shell , 請參考 : [轉移原有 Git 資料到 Azure DevOps 上]
我甚至將這個功能拆成2個 shell,
一個是抓GIT資料倉下來的功能,一個是推送遠端功能,
目的只是保持資料夾同步,並利用排程自動執行
這樣就可以利用自已建立的 Gitea Server,
不受微軟超過5人要收費的限制,還可以利用 Azure DevOps 當成雲端備援,且不限空間,
若使用亞馬遜的 AWS CodeCommit ,還有流量限制和 Git 指令次數限制,
第一個 Shell 只為了把遠端的資料倉抓到本地端
- filename='GitDIR.txt'
- #因為是由網路芳鄰抓取,若是HTTPS請換成對應的 URL
- sourcePath='W:'
- exec < $filename
- while read line
- do
- #--- 只將 .GIT 資料倉抓取下來
- #檢查資料夾是否存在,若存在就刪除重抓
- if [ -d "$line" ] ; then
- echo "$line 存在"
- rm -rf $line
- echo "刪除資料夾 ./$line/"
- fi
- #從將原始資料倉從 Server 上抓下來,使用 bare 參數表示只抓 .git 隱藏檔內的資料
- echo "抓取 W:/$line/"
- #git clone --bare W:/$line/
- git clone --bare $sourcePath/$line/
- done
第二個 Shell 是將本地端的資料倉覆蓋掉遠端的資料倉
- filename='GitDIR.txt'
- url='https://要上傳的帳號名稱@dev.azure.com/要上傳的帳號名稱/'
- ## 讀取檔案
- exec < $filename
- while read line
- do
- #--- 將 GIT 轉移到另一個 Git Server
- #檢查資料夾是否存在,若存在就刪除重抓
- if [ -d "$line" ] ; then
- cd ${line}
- #將目前的資料倉同步到 Azure DevOps 的 GIT Server
- git push --mirror $url$line/_git/$line
- cd ..
- pwd=$(dirname $(readlink -f "$0"))
- echo "完成 Push ,切換路徑 : $pwd"
- else
- echo "找不到資料倉 $line "
- fi
- done
至於如何應用? 就看實際狀況而定了。