[email protected] @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from...

66
patterns & practices Symposium 2013 Introducing Git version control into your team Mark Groves [email protected] @mgroves84

Transcript of [email protected] @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from...

Page 1: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

patterns & practices Symposium 2013

Introducing Git version control into

your team

Mark [email protected]

@mgroves84

Page 2: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

History

Created by Linus Torvalds for work on the

Linux kernel ~2005

Some of the companies that use git:

Page 3: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Strength of Git

Everything is done offline

…except push/pull

Everyone has the complete history

Page 4: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Centralized VC vs. Distributed VC

Central ServerRemote Server

Page 5: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Initialization

C:\> mkdir CoolProjectC:\> cd CoolProjectC:\CoolProject > git initInitialized empty Git repository in C:/CoolProject/.gitC:\CoolProject > notepad README.txtC:\CoolProject > git add .C:\CoolProject > git commit -m 'my first commit'[master (root-commit) 7106a52] my first commit1 file changed, 1 insertion(+)create mode 100644 README.txt

Page 6: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

master

A

> git commit –m ‘my first commit’

Page 7: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

master

> git commit (x2)

A B C

Page 8: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

bug123

master

> git checkout –b bug123

A B C

Page 9: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

master

> git commit (x2)

A B C

D E

bug123

Page 10: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

master

> git checkout master

A B C

D E

bug123

Page 11: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

bug123

master

> git merge bug123

A B C D E

Page 12: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

master

> git branch -d bug123

A B C D E

Page 13: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

master

A B C D E

F G

bug456

Page 14: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

master

A B C D E

F G

bug456

> git checkout master

Page 15: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

master

A B C D E

F G

> git merge bug456

H

bug456

Page 16: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

master

A B C D E

F G

> git branch -d bug456

H

Page 17: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

master

A B C D E

F G

bug456

Page 18: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

master

A B C D E

> git rebase master

F’ G’

bug456

Page 19: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

master

A B C D E

> git checkout master> git merge bug456

F’ G’

bug456

Page 20: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branching Review

Local branches are very powerful

Quick and Easy to create ‘Feature’ Branches

Rebase is not scary

Page 21: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Software is a Team Sport

Page 22: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Sharing commits

My Local

Repo

Tom’s Repo

Tracey’s

Repo

Matt’s Repo

A B C

A B C A B C

A B C

Page 23: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Sharing commits

My Local

Repo

Tom’s Repo

Tracey’s

Repo

Matt’s Repo

A B C

A B C A B C

A B C

Remote Repo

A B C

D

D

D

D

D

Page 24: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Setting up a Remote

Adding a remote to an existing local repoC:\CoolProject > git remote add origin https://git01.codeplex.com/coolprojectC:\CoolProject > git remote -vorigin https://git01.codeplex.com/coolproject (fetch)origin https://git01.codeplex.com/coolproject (push)

Page 25: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Setting up a Remote

Clone will auto setup the remoteC:\> git clone https://git01.codeplex.com/coolprojectCloning into 'coolproject'...remote: Counting objects: 3, done.remote: Total 3 (delta 0), reused 0 (delta 0)Unpacking objects: 100% (3/3), done.C:\> cd .\coolprojectC:\CoolProject> git remote -vorigin https://git01.codeplex.com/coolproject (fetch)origin https://git01.codeplex.com/coolproject (push)

Page 26: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

A

master

B C D E

bug123

Page 27: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

A

master

origin/master

B C D E

bug123

Page 28: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

A

B C D E

master

bug123

origin/master

Page 29: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

A

B C D E

master

bug123

F G

origin/master

origin/master

Page 30: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

A

B C D E

master

bug123

> git checkout master

origin/master

Page 31: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

A

B C D E

master

bug123

F G

> git pull origin

origin/master

Page 32: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Pull = Fetch + Merge

Fetch - updates your local copy of the

remote branch

Pull essentially does a fetch and then runs

the merge in one step.

Page 33: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

A

B C D E

master

bug123

F G

origin/master

Page 34: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

A

B C D E

master

bug123

F G

> git checkout bug123

origin/master

Page 35: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

A

B’ C’ D’ E’

master

bug123

F G

> git rebase master

origin/master

Page 36: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

A

B’ C’ D’ E’

master

bug123

F G

> git checkout master

origin/master

Page 37: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

A

master

bug123

F G

> git merge bug123

B’ C’ D’ E’

origin/master

Page 38: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

A

master

F G

> git push origin

B’ C’ D’ E’

bug123

origin/master

Page 39: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Push

Pushes your changes upstream

Git will reject pushes if newer changes exist

on remote.

Good practice: Pull then Push

Page 40: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

A

master

F G B’ C’ D’ E’

bug123

origin/master

Page 41: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

A

master

F G

> git branch -d bug123

B’ C’ D’ E’

origin/master

Page 42: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Short vs. Long-Lived Branches

Great for multi-version work

Follow same rules as Master…Story branches

Integrate frequently

Pushed to Remotes

Page 43: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

E

master

origin/master

Page 44: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

E

master

origin/master

develop

> git branch develop

Page 45: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

E

master

origin/master

develop

> git push origin develop

origin/develop

Page 46: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

E

master

origin/master

develop

> git checkout develop

origin/develop

Page 47: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

E

master

origin/master

F G

developorigin/develop

Page 48: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

E

master

origin/master

F G

develop

origin/develop

> git pull origin develop

Page 49: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

E

master

origin/master

F G

develop

origin/develop

> git checkout –b idea

idea

Page 50: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

E

master

origin/master

F G

developorigin/develop

> git commit

idea

H

Page 51: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

E

origin/master

F G

origin/develop idea

H

I

master

develop

Page 52: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

E

origin/master

F G

origin/develop idea

H

master

develop

> git pull (at least daily)

I

Page 53: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

E

origin/master

F G

origin/develop idea

H

master

> git checkout develop

I

develop

Page 54: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

E

origin/master

F G

origin/develop idea

H

master

> git merge idea (fast forward merge)

I

develop

Page 55: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

E

origin/master

F G

origin/develop

H

master

> git branch –d idea

I

develop

Page 56: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated

E

origin/master

F G

origin/develop

H

master

> git push origin develop

I

develop

Page 57: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Merge Flow vs. Rebase Flow

E

origin/master

F G

origin/develop

H

master

> git push origin develop

I

develop

Page 58: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated – Merge Flow

E

origin/master

F G

origin/develop

H

master

> git checkout master

I

develop

Page 59: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated – Merge Flow

E

origin/master

F G

origin/develop

H

master

> git merge develop

I

develop

J

Page 60: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated – Merge Flow

E

origin/master

F G

origin/develop

H

master

> git push origin

I

develop

J

Page 61: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated – Rebase Flow

E

origin/master

F G

origin/develop

H

master

> git checkout master

I

develop

Page 62: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated – Rebase Flow

E

origin/master

F G

origin/develop

H

master

> git rebase develop

I’

develop

I

Page 63: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Branches Illustrated – Rebase Flow

E

origin/master

F G

origin/develop

H

master

> git push origin

I’

develop

Page 64: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Rebase Flow

E

origin/master

F G

origin/develop

H

master

I’

develop

E

origin/master

F G

origin/develop

H

master

I

develop

J

Merge Flow

Page 65: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Short vs. Long-Lived Branches

Great for multi-version work

Follow same rules as Master

…use Story branches

Define your conventions

What branches do you want to share?

Branch per environment?

Page 66: mgroves@microsoft.com @mgroves84 - smurf.sfsu.edusmurf.sfsu.edu/~csif/resources/git/GitTutorial from Mark Groves.pdf · Introducing Git version control into your team Mark Groves

Other very powerful tutorial

https://www.atlassian.com/git/tutorials/comparing-workflows/centralized-workflow