3 git

82
An Introduction to GIT Version Control with Git Avoid to be the repository manager Dr. Fabio Fumarola

Upload: fabio-fumarola

Post on 18-Jul-2015

2.955 views

Category:

Data & Analytics


0 download

TRANSCRIPT

An Introduction to GITVersion Control with Git

Avoid to be the repository manager

Dr. Fabio Fumarola

Agenda• What is Version Control? (and why use it?)• What is Git? (And why Git?)• How git works• Create a repository• Branches• Add remote• How data is stored

2

History• Created by Linus Torvalds for work on the Linux

kernel ~2005• Some of the companies that use git:

3

What is Git?

Git is a

DistributedVersion Control System

OR

Git is a

Content Management System

Git is a

history storage system

Git is a

content tracker

How ever you think about it…

How ever you think about it…

What is a Version Control • Version Control - A system for managing changes made to

documents and other computer files• What kinds of files can we use it with?

– Source code– Documentation– Short stories– Binary files (music and pictures)

• What should we use it for?– Text files– Projects that have lots of revisions (changes)– Collaborating

12

VCS Systems and their Operations

• Lots of different choices available:– CVS– SVN– Perforce– Git– Mercurial (Hg), Bazaar– And more!

• Most follow a repository model (though differ in how the repositories work)

13

So why do we need a VCS?• Our goals

– Share code (or something else) easily– Keep track of any changes we make (and undo them with

ease)– Maintain multiple versions of the same project/code base– Clearly communicate what changes have been made

• There are two type of VCS– Centralized and– Distributed

14

Distributed vs Centralized

Centralized VCS•One central repository•Must be capable of connecting to repo•Need to solve issues with group members making different changes on the same files

Distributed VCS•Everyone has a working repo•Faster•Connectionless•Still need to resolve issues, but it's not an argument against DVCS

15

Centralized vs Distributed

16

Central ServerRemote Server

Git file lifecycle

17

Creating our first repository• Install git• Establish our first repository:

– mkdir git-test– cd git-test– git init

• What do we have here?– git status

18

Using our first repository• Add a file

– touch file.txt– git add file.txt– git commit –m “add the first file”

19

Branching• With Git we should embrace

the idea of branching• Branching is the best method

to work with other in a project

20

Branches Illustrated

master

A

> git commit –m ‘my first commit’> git commit –m ‘my first commit’

Branches Illustrated

master

> git commit (x2)> git commit (x2)

A B C

Branches Illustrated

bug123

master

> git checkout –b bug123> git checkout –b bug123

A B C

Branches Illustrated

master

> git commit (x2)> git commit (x2)

A B C

D E

bug123

Branches Illustrated

master

> git checkout master> git checkout master

A B C

D E

bug123

Branches Illustrated

bug123

master

> git merge bug123> git merge bug123

A B C D E

Branches Illustrated

master

> git branch -d bug123> git branch -d bug123

A B C D E

Branches Illustrated

master

A B C D E

F G

bug456

Branches Illustrated

master

A B C D E

F G

bug456

> git checkout master> git checkout master

Branches Illustrated

master

A B C D E

F G

> git merge bug456> git merge bug456

H

bug456

Branches Illustrated

master

A B C D E

F G

> git branch -d bug456> git branch -d bug456

H

Branches Illustrated

master

A B C D E

F G

bug456

Branches Illustrated

master

A B C D E

> git rebase master> git rebase master

F’ G’

bug456

Branches Illustrated

master

A B C D E

> git checkout master> git merge bug456 > git checkout master> git merge bug456

F’ G’

bug456

Branches Review• Branches should be used to create “Features” in our

project• Local branches are very powerful• Rebase is not scary

35

Adding a remoteBut, how we share our code with the other collaborators?

36

My Local Repo

Tom’s Repo

Tracey’s Repo

Matt’s Repo

A B C

A B C A B C

A B C

Sharing commits

37

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

AA BB CC

D

D

D

D

DD

Setting up a Remote• We can clone an existing repository– git clone [email protected]:fabiofumarola/akka-tutorial.git

• We can push our changes– git push

• We can pull friends change– git pull

• We can also add a remote to an existing repository– git remote add origin [email protected]:fabiofumarola/akka-

tutorial.git38

Branches with remote

A

master

B C D E

bug123

Branches with remote

A

master

origin/master

B C D E

bug123

Branches with remote

A

BB CC DD EE

master

bug123

origin/master

Branches with remote

A

BB CC DD EE

master

bug123

FF GG

origin/master

origin/masterorigin/master

Branches with remote

A

BB CC DD EE

master

bug123

> git checkout master> git checkout master

origin/master

Branches with remote

A

BB CC DD EE

master

bug123

F G

> git pull origin> git pull origin

origin/master

Pull = Fecth + Merge

Fetch - updates your local copy of the remote branch

Pull essentially does a fetch and then runs the merge in one step.

Branches Illustrated

A

BB CC DD EE

master

bug123

F G

origin/master

Branches Illustrated

A

BB CC DD EE

master

bug123

F G

> git checkout bug123> git checkout bug123

origin/master

Branches Illustrated

A

B’B’ C’C’ D’D’ E’E’

master

bug123

F G

> git rebase master> git rebase master

origin/master

Branches Illustrated

A

B’B’ C’C’ D’D’ E’E’

master

bug123

F G

> git checkout master> git checkout master

origin/master

Branches Illustrated

A

master

bug123

F G

> git merge bug123> git merge bug123

B’B’ C’C’ D’D’ E’E’

origin/master

Branches Illustrated

A

master

F G

> git push origin> git push origin

B’ C’ D’ E’

bug123

origin/master

Push

Pushes your changes upstream

Git will reject pushes if newer changes exist on remote.

Good practice: Pull then Push

Branches Illustrated

A

master

F G B’ C’ D’ E’

bug123

origin/master

Branches Illustrated

A

master

F G

> git branch -d bug123> git branch -d bug123

B’ C’ D’ E’

origin/master

Short vs. Long-Lived Branches• We can use branch to:– Solve bugs (hotfixes)– Create features– Make a release

• In order to simplify the management we can use:– Git Flow: http://danielkummer.github.io/git-flow-

cheatsheet/index.it_IT.html

Branches Illustrated

E

master

origin/master

Branches Illustrated

E

master

origin/master

develop

> git branch develop> git branch develop

Branches Illustrated

E

master

origin/master

develop

> git push origin develop> git push origin develop

origin/develop

Branches Illustrated

E

master

origin/master

develop

> git checkout develop> git checkout develop

origin/develop

Branches Illustrated

E

master

origin/master

FF GG

developorigin/develop

Branches Illustrated

E

master

origin/master

F G

developorigin/develop

> git pull origin develop> git pull origin develop

Branches Illustrated

E

master

origin/master

F G

develop

origin/develop

> git checkout –b idea> git checkout –b idea

idea

Branches Illustrated

E

master

origin/master

F G

developorigin/develop

> git commit> git commit

idea

H

Branches Illustrated

E

origin/master

F G

origin/develop idea

H

II

master

develop

Branches Illustrated

E

origin/master

F G

origin/develop idea

H

master

develop

> git pull (at least daily)> git pull (at least daily)

I

Branches Illustrated

E

origin/master

F G

origin/develop idea

H

master

> git checkout develop> git checkout develop

I

develop

Branches Illustrated

E

origin/master

F G

origin/develop idea

H

master

> git merge idea (fast forward merge)> git merge idea (fast forward merge)

I

develop

Branches Illustrated

E

origin/master

F G

origin/develop

H

master

> git branch –d idea> git branch –d idea

I

develop

Branches Illustrated

E

origin/master

F G

origin/develop

H

master

> git push origin develop> git push origin develop

I

develop

Merge Flow vs. Rebase Flow

E

origin/master

F G

origin/develop

H

master

> git push origin develop> git push origin develop

I

develop

Branches Illustrated – Merge Flow

E

origin/master

F G

origin/develop

H

master

> git checkout master> git checkout master

I

develop

Branches Illustrated – Merge Flow

E

origin/master

F G

origin/develop

H

master

> git merge develop> git merge develop

I

develop

J

Branches Illustrated – Merge Flow

E

origin/master

F G

origin/develop

H

master

> git push origin> git push origin

I

develop

J

Branches Illustrated – Rebase Flow

E

origin/master

F G

origin/develop

H

master

> git checkout master> git checkout master

I

develop

Branches Illustrated – Rebase Flow

E

origin/master

F G

origin/develop

H

master

> git rebase develop> git rebase develop

I’

develop

II

Branches Illustrated – Rebase Flow

E

origin/master

F G

origin/develop

H

master

> git push origin> git push origin

I’

develop

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

How Git stores data• Git stores the content of each file in the tracking history• Each time we do a commit it is made a copy of the file.• However the content of each file is subject to revision for

conflicts (merge).

78

Git best practices for code collaboration• When to commit?

– Source of major arguments (big changes vs small change)– Never put broken code on the master branch (test first!)– Try not to break things (don't do two weeks worth of work in one

commit)– Always use a clear, concise commit message– Put more details in lines below, but always make the first line short– Describe the why; the what is clear in the change log

• When making giant changes, consider branches (we'll talk about these in a few slides)

• Oh, and make sure your name and email are right79

Supplemental

SSH• Used to be most common transport for git• Pros

– Allows reads and writes– Authenticated network protocol– Secure: data transfer is encrypted and authenticated– Efficient: makes data as compact as possible

• Cons– No anonymous read-only access

Sidebar: What is SSH?• SSH is a protocol used for secure network

communication Getting files from github• Generate public/private keys (ssh-keygen)• Distribute public keys (add key to github)• Someone (github) sends secure “message” (files) –

they encode with public key• You receive the message/files – decode with

private key (only you know)Putting files on github• Process is reversed to send files to github• You have the github public key (see

github_rsa.pub, in Documents and Settings/Cyndi/.ssh on my machine)

• Use it to encode when sending• github uses their private key to decode