原先在公司的 GIT Server 因為老闆擔心,所有程式碼放到雲端,萬一被駭客偷走糟了,
所以一直以來我們的做法是放在公司的電腦主機,以網路芳鄰的方式連進去取資料,
同事們就以 VPN 的方式連回辦公室取資料,
我們也針對這些動作寫了一套 Git Shell 幫忙把資料抓下來,否則開發一個產品需要用到四五十個專案,單單同步也夠嗆了...
問題是使用 VPN 的速度本身就不快,所有相關專案同步下來大約要半小時多,確實有點久,
但我們也忍了幾年這麼使用,
最近老闆突然開竅了,同意把版本控管上雲端,於是我們 Survey 了幾家可行方案,決定用 Microsoft Azure DevOps ,
雖然 Azure DevOps 前5人免費,超過每人每月收6美元,比亞馬遜的 AWS CodeCommit 超過5人每人每月1美元來得貴,
但 Azure DevOps 不限空間和流量,也沒 Git 指令限制,還是比較符合目前所需,
Azure 提供 CLI 方式,可直接對 DevOps 下指令,
參考官網如何安裝 Azure CLI ,使用 PowerShell 安裝並登入成功後,寫個自動建立資料倉的 PowerShell,記得副檔名要改成 .ps1 (Win10後可由檔案總管執行 ps1 其它版本好像不行,我統一都是在 powershell 中切換目錄執行)
$file = Get-Content ".\GitFolder.txt" foreach ($element in $file) { Write-Host "Creat " $element az devops project create --name $element } Write-Output "OK 完成" Read-Host -Prompt '按下 Enter 結束 !'
這個 Shell 主要功能就是把 GitFolder.txt 裡面所列的 GIT 資料倉名稱全部建立到 DevOps 上,
建立完成後就準備把舊的 GIT 資料倉搬移到 DevOps 上了,
這個做法很簡單,
1. 先將目前所有 GIT 資料倉抓一份到本地端
2. 推送到目的 GIT server
就這樣,2步驟
filename='GitFolder.txt' url='https://要上傳的帳號名稱@dev.azure.com/要上傳的帳號名稱/' #因為是由網路芳鄰抓取,若是HTTPS請換成對應的 URL sourcePath='W:' ## 讀取檔案 exec < $filename while read line do #--- 將 GIT 轉移到另一個 Git Server #檢查資料夾是否存在,若存在就刪除重抓 if [ -d "$line" ] ; then echo "$line 存在" rm -rf $line echo "刪除資料夾 ./$line/" fi #先將原始資料倉從 Server 上抓下來,使用 bare 參數表示只抓 .git 隱藏檔內的資料 echo "抓取 $sourcePath/$line/" #git clone --bare W:/$line/ git clone --bare $sourcePath/$line/ cd ${line} #將抓下來的最新資料倉同步到新的 GIT Server git push --mirror $url$line/_git/$line cd .. #刪除剛抓下來的資料倉,若使用 rm -d 刪除資料夾會有錯誤,因為資料夾不是空的 rm -rf $line echo "刪除資料夾 ./$line/" done
做完以上步驟,就成功把舊的 GIT 資料倉轉移到 Azure DevOps 上了。
沒有留言:
張貼留言