Why we ditched TFS and embraced Git, Github, TeamCity and Myget

20
Dennis Doomen (@ddoomen) – Aviva Solutions Why we ditched TFS and embraced Git, Github, TeamCity and MyGet

description

For over three years our product development organization has been growing from about 8 developers to the 45 we have now. As a Microsoft oriented organization, the obvious choice has been Team Foundation Server because of it’s many integrated elements such as source control, build environment, work item tracking, dashboards and reporting. However, during the third year the number of concurrent releases increased significantly so we started to get faced with the limitations of its centralized source control. About 6 months ago, we decided to finally make the switch to Git, a well-known distributed source control approach very popular in the open-source community. Many of us were already active in open-source projects, but introducing git in a large group of people has been, let’s say, interesting. In this session, I’d like to share the approach we took, the challenges we had, and how we solved most of them. Of course I will share the fundamental concepts behind Git and explain you why Git is so much better than a centralized source control solution.

Transcript of Why we ditched TFS and embraced Git, Github, TeamCity and Myget

Page 1: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

Dennis Doomen (@ddoomen) – Aviva Solutions

Why we ditched TFS and embraced Git, Github, TeamCity and MyGet

Page 2: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

2

• Principal Consultant Aviva Solutions• 17 years in this profession• C++ origins but since 2001 addicated

to C# and .NET• Main interests

• TDD, BDD, DDD, ES, CQRS, • OO, Design Patterns,

Architecture• Scrum/XP/Kanban• Application Lifecycle

Management

• Speaker• Public initiatives

– C# Coding Guidelines– Fluent Assertions

• Internet– www.dennisdoomen.net– DZone MVB– @ddoomen

Page 3: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

3

The problems we had with TFS

• Branching and merging expensive• Building a branch is painful• Difficult to track merging history• Lack of reviewing tools• Weird merging side-effects• Dumn change tracking• Limited Cloud offering

Page 4: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

4

Why do we think Git is better?

Light-weight branching

DEMO

Page 5: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

5

Why do we think Git is better?

Fast-forward Merging

Images: Git Glow

Page 6: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

6

Why do we think Git is better?

(Interactive) Rebasing

Images: Pro Git Book

Page 7: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

7

Why do we think Git is better?

Pull Requests

Images: Atlassian

Page 8: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

8

Why do we think Git is better?

• Advanced compression heuristics• Cleaning up history• Splitting repositories• ‘Automatic’ backups

Page 9: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

9

Why do we think Git is better?

DEMO

Page 10: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

10

Additional Workflows

Centralized Workflow Feature Branch Workflow

Images: Atlassian

Page 11: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

11

Additional Workflows

Gitflow Workflow Forking Workflow

Images: Atlassian

Page 12: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

12

Step 1 : Switching to Git and TeamCity

• Big learning curve• CR/LF and .gitattributes pain• Still no review support• No check-in policies• No easy work item association• No support for Submodules• No peeking at other branches• No forking• TFS-way-of-working = Noise

Page 13: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

13

Why Team City

• Branch detection• Build investigation• Test history• Queue and agent statistics• Easy templating• Auditing• Parameterized builds• Cached repositories• Build chains• Notifications

DEMO

Page 14: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

14

Step 2 : Switching to GitHub

• Pull Request reviewing• Integration with TeamCity• Requires internet bandwidth• Lots of functionality on

website• Forks and private repositories• Limited issue support

Page 15: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

15

Step 3 : Next steps

• Jira• Breaking into

separate repos and Nuget packaging

Page 16: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

16

Existing Challenges

• Limited Git support in VS• Tooling not aligned• History of a directory• Find origin of a branch• Commits vs branches• Where did a merge come from• Which commits have been

merged to master

Page 17: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

17

My Advice

NuGet Package

Pull Request(-no-ff)

Pull Request(-no-ff)

master

dev

fetch & rebase

fetch & rebase

squash

Product Component

Page 18: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

18

How to contact me?

[email protected] • www.twitter.com/ddoomen • www.dennisdoomen.net • github.com/dennisdoomen/fluentassertions• www.csharpcodingguidelines.com

Page 20: Why we ditched TFS and embraced Git, Github, TeamCity and Myget

20

A big thank you to our sponsors

Gold Partners

Silver & Track Partners

Platinum Partners