原先在公司的 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 上了。
沒有留言:
張貼留言