但是使用者一多,就要另外收費,對於小公司來說也是一筆負擔,
於是想到利用 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
至於如何應用? 就看實際狀況而定了。