2021年10月20日 星期三

轉移原有 Git 資料到 Azure DevOps 上

原先在公司的 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步驟

將以下語法存成 xxxx.sh 的檔案,使用 Git Bash 執行就可以了
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 上了。

沒有留言:

張貼留言

熱門文章