SlideShare a Scribd company logo
1
Migrate from TFS to Git
(using Azure DevOps)
Roberson Liou
關於我
▪ 手沖咖啡科技宅
▪ 打雜的後端工程師
▪ twMVC 核心成員
▪ DevOps Taiwan 志工
▪ Blog:工程良田的小球場
2
大綱
3
1 移轉!吃飽沒事幹?
2 分支策略選用
3 歷史紀錄移轉
4 Azure DevOps With Git
移轉!吃飽沒事幹?
4
???
???
為什麼我們不用 Git?
 同事A:Git?好像有聽過欸...
 同事B:喔我知道,就是 GitHub 在用的那個嘛!
 同事C:Git 很好,不過我們一直都是用 TFS。
 同事D:如果有時間的話,我們再來導入 Git。
 以上內容純屬虛構,如有雷同純屬巧合。
5
不要問
為什麼沒有人做這個
先承認你就是
「沒有人」
6
為什麼要移轉?
▪ 普遍的業界標準
▪ 分支成本(空間、時間、靈活度)
▪ Pull Request
▪ 可離線的開發環境
7
https://shorturl.at/ajAW4
事前準備
 決定使用工具
 挑選分支策略
 訂定歷史記錄移轉方式
 舉辦 Training 及 Lab
 等待適合時機進行移轉
8
使用工具
9
Visual Studio
▪ 地表最強的開發工具
▪ 整合Azure DevOps
▪ 介面支援多種Git操作
▪ 支援Git/TFVC
▪ 內建看板及 Wiki
▪ 整合CI/CD
▪ 自訂測試計畫
Azure DevOps Server
分支策略選用
10
分支策略選用
main
B : 分支, Branch
C : 提交, Commit
M : 合併, Merge
分支策略(TFS)– Release Isolation Flow
release-1.0.0 C
M B
release-1.1.0
CCC
C
bug
B
release-1.0.1
C
bug-fix
分支策略(TFS)– Release Isolation
▪ 優點
▪ 分支策略簡單,學習曲線較低
▪ 開發者僅需專注於 main 進行開發
▪ Release 分支獨立不受干擾
▪ 缺點
▪ 主分支(main)穩定性不足
▪ Release 分支成本較高(package restore...)
12
master
B : 分支, Branch
C : 提交, Commit
M : 合併, Merge
分支策略(Git) – Trunk Based Development
13
B
topic-1 C
release-1.0.0
PR
M
topic-1
C C… …
B
C
bug
bug-fix-1 C
B
bug-fix-1
M
cherry-pick
topic-2
B M
PR
topic-2
C C C… …
C
M
PR
release-1.0.1
分支策略(Git) – Trunk Based Development
▪ 優點
▪ 分支週期短,反饋速度較快
▪ 僅需維護一條 master 分支,減少合併衝突機率
▪ 缺點
▪ 多條分支同時合併回 master 時,易發生 CI 資源搶用現象
▪ Topic 分支容易受 master 分支影響
14
歷史記錄移轉
15
歷史紀錄該移轉嗎?
▪ TFS 與 Git 先天不同
▪ 分支方式
▪ 檔案變更記錄儲存方式
▪ 「我們建議您不要移轉歷史記錄,而是只將最新的分支版本移轉至
Git。」 – Matt Cooper, Program Manager, Azure DevOps
▪ 持續維護舊版控系統(TFS)
▪ 於新版控系統的專案描述中放上舊版控的連結
16
Azure DevOps 內建移轉方式
▪ 僅支援 Azure DevOps | TFS 2018、2017
▪ 兩個專案必須在同一個組織下
▪ 最多只能移轉 180 天的歷史記錄
▪ 專案大小不能超過 1GB
17
git-tfs
▪ Open Source
▪ 提供 git、tfs 雙向移轉
▪ 指令式操作
▪ git tfs clone http://tfs:8080/tfs/DefaultCollection $/some_project
▪ 移轉速度較慢
▪ 參考文章:TFVC - Git 專案搬家經驗談(黑暗執行緒)
18
Training & Lab
19
Training
20
master B
Joe/test C
merge
M
Joe/test
C
file-Joe
Lab
Azure DevOps
TFS & Git 指令比較
21
TFS Git
簽入( local ) X commit
簽入( remote ) Check In push
簽出 Get Latest Version pull = fetch + merge
對照本機路徑 Map Local Path clone
拆掉 local commit X reset --hard
暫存程式碼 Shelveset stash
22
Azure DevOps with Git
Branch Policy(1)
▪ 強迫該分支只接受 PR
▪ 套用後該分支無法刪除
▪ 設定最低通過的 Reviewer 人數
23
Branch Policy(2)
▪ 檢查是否有工作項目連結
▪ 確認每個回覆是否有解決
▪ 限制接受的合併方式
24
Branch Policy(3)
▪ 驗證建置及測試是否通過
▪ 須先建立 CI Pipeline
▪ 設定預設 Reviewer 名單
▪ 可指定群組
25
Pull Request
▪ 協助程式碼審查流程
▪ 可加入自訂標籤
▪ 在 PR 完成時...
▪ 可挑選合併方式
▪ 可在合併後刪除分支
▪ 可自動完成連結的工作項目
26
Pull Request Template
▪ 可引導 Requestor 描述情境
▪ 套用方式分為 3 種
▪ Default
▪ Branch Specific
▪ Additional
▪ 命名參考(MSDN)
27
Default
Additional
Branch
Specific
程式還沒寫完但想找人Review?
▪ 走一般 PR 機制可能會不小心被合併
▪ 標題開頭加上「WIP」、「Do-not-Merge」
▪ Draft Pull Request
▪ 不會觸發 Build Validation
▪ 預設的 Reviewer 不會被加入
▪ 當功能完成後可直接發佈成正式的 PR
28
Recap
29
108/9
規劃
108/10
建置 Azure DevOps Server
108/11
POC Test
108/12
Training
109/1
Migrating
導入技術時常見的狀況
30
降低學習曲線 提高使用意願
主動協助排故搞定主管
評估成本
學習成本
影響範疇
時間、金錢
預期效益
建立信任
不做批判
做好規劃
定期回饋
主動實驗
教育訓練
拉攏信眾
小組試行
全面導入
等待適當時機
推薦閱讀 – Git & Branch Strategies
▪ Git Turtorials (Bitbucket)
▪ Branch Strategies for TFS (MSDN)
▪ How We Use Git At Microsoft (MSDN)
▪ Trunk Based Introduction
31
推薦閱讀 – How to Migrate
▪ 從集中版本控制到分散式版本控制 (王建興)
▪ TFS Git 筆記 - 該用 TFVC 還是 Git?(黑暗執行緒)
▪ TFS Git 筆記 - TFVC - Git 專案搬家經驗談 (黑暗執行緒)
▪ Map TFVC actions to Git (MSDN)
▪ Plan your migration to Git (MSDN)
32
33
The End

More Related Content

What's hot (20)

PPTX
工程師必備第一工具 - Git
Alan Tsai
 
PDF
Git 版本控制 (使用教學)
Jui An Huang (黃瑞安)
 
PDF
Learning to Use Git | WeiYuan
Wei-Yuan Chang
 
PPTX
Git & Sourcetree 介紹
Adison wu
 
PDF
Git與source tree 基礎教學
Duncan Chen
 
PPTX
Visual Studio 2015 與 Git 開發實戰
Will Huang
 
PDF
Introduction to git
Bo-Yi Wu
 
PPTX
Ian 20150515 grunt
LearningTech
 
PDF
A successful git branching model 導讀
Wen Liao
 
PDF
My DevOps Tour 0.1
Chu-Siang Lai
 
PPTX
電子內容管理 使用Git 與 github 1
Alan Tsai
 
PPTX
Jenkins x GitLab CI
Yihsuan Chen
 
PDF
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Chu-Siang Lai
 
PDF
Git tutorial for windows user (給 Windows user 的 Git 教學)
Cloud Tu
 
PDF
Git in a nutshell
Nelson Tai
 
PPTX
大家應該都要會的工具 Git 從放棄到會用1-基礎篇
Alan Tsai
 
PPTX
用Octopus deploy做自動部署 - 快速上手
Alan Tsai
 
PDF
Git由超淺入超深
羊 小咩 (lamb-mei)
 
PDF
SRE CH12 - Effective Troubleshooting
Rick Hwang
 
PPTX
開發用不著打一架 - 分散式版本控制 Git
Calvin Huang
 
工程師必備第一工具 - Git
Alan Tsai
 
Git 版本控制 (使用教學)
Jui An Huang (黃瑞安)
 
Learning to Use Git | WeiYuan
Wei-Yuan Chang
 
Git & Sourcetree 介紹
Adison wu
 
Git與source tree 基礎教學
Duncan Chen
 
Visual Studio 2015 與 Git 開發實戰
Will Huang
 
Introduction to git
Bo-Yi Wu
 
Ian 20150515 grunt
LearningTech
 
A successful git branching model 導讀
Wen Liao
 
My DevOps Tour 0.1
Chu-Siang Lai
 
電子內容管理 使用Git 與 github 1
Alan Tsai
 
Jenkins x GitLab CI
Yihsuan Chen
 
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Chu-Siang Lai
 
Git tutorial for windows user (給 Windows user 的 Git 教學)
Cloud Tu
 
Git in a nutshell
Nelson Tai
 
大家應該都要會的工具 Git 從放棄到會用1-基礎篇
Alan Tsai
 
用Octopus deploy做自動部署 - 快速上手
Alan Tsai
 
Git由超淺入超深
羊 小咩 (lamb-mei)
 
SRE CH12 - Effective Troubleshooting
Rick Hwang
 
開發用不著打一架 - 分散式版本控制 Git
Calvin Huang
 

Similar to How we migrate TFS to Git ( using Azure DevOps ) (11)

PDF
twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC
 
PDF
Git 經驗分享
Mu Chun Wang
 
PDF
01 DevOps and Azure DevOps overview
Alan Tsai
 
PPT
Version control0221
jianhongciou
 
PDF
My DevOps Tour 2.3
Chu-Siang Lai
 
PPTX
大家應該都要會的工具 Git 從放棄到會用2-分支篇
Alan Tsai
 
PDF
02 azure devops pipeline - build
Alan Tsai
 
PPTX
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
Edward Kuo
 
PDF
如何與 Git 優雅地在樹上唱歌
Mu Chun Wang
 
PPTX
[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊
Edward Kuo
 
PPTX
git merge 與 rebase 的觀念與實務應用
Will Huang
 
twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC
 
Git 經驗分享
Mu Chun Wang
 
01 DevOps and Azure DevOps overview
Alan Tsai
 
Version control0221
jianhongciou
 
My DevOps Tour 2.3
Chu-Siang Lai
 
大家應該都要會的工具 Git 從放棄到會用2-分支篇
Alan Tsai
 
02 azure devops pipeline - build
Alan Tsai
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
Edward Kuo
 
如何與 Git 優雅地在樹上唱歌
Mu Chun Wang
 
[2019 DevOpsDays Taipei]Azure DevOps 建立 DevOps 團隊
Edward Kuo
 
git merge 與 rebase 的觀念與實務應用
Will Huang
 
Ad

How we migrate TFS to Git ( using Azure DevOps )