47
GIT: (a)Gentle InTroduction Bruno Bossola

Geecon11 - Git: a Gentle InTroduction

Embed Size (px)

Citation preview

Page 1: Geecon11 -  Git: a Gentle InTroduction

GIT: (a)Gentle InTroduction

Bruno Bossola

Page 2: Geecon11 -  Git: a Gentle InTroduction

Agenda

About version controlConceptsWorking locally

Remote operations

Enterprise adoptionQ&A

Page 3: Geecon11 -  Git: a Gentle InTroduction

Hey dude who are ya??

Developer since 1988XP Coach during 2kCo-founder and coordinator of JUG Torino

Java Champion since 2005

Manager at Gitenterprise.comWorking as contractor across Europe

Page 4: Geecon11 -  Git: a Gentle InTroduction

About version control

P icture courtesy of globalnerdy.comAll rights kindly reserved

Page 5: Geecon11 -  Git: a Gentle InTroduction

Centralized SCM

CVSSVN

P icture courtesy of progit.org. All rights kindly reserved

Page 6: Geecon11 -  Git: a Gentle InTroduction

Distributed SCM

Git

MercurialBazaar

P icture courtesy of progit.org. All rights kindly reserved

Page 7: Geecon11 -  Git: a Gentle InTroduction

Concepts

Page 8: Geecon11 -  Git: a Gentle InTroduction

Concepts

Snapshots, not deltas

Nearly every operation is localIntegrity is a priority

The “three states”

Page 9: Geecon11 -  Git: a Gentle InTroduction

Snapshot, not deltas

Deltas are maintained: CVS, SVN, Bazaar

P icture courtesy of progit.org. All rights kindly reserved

Page 10: Geecon11 -  Git: a Gentle InTroduction

Snapshot, not deltas

Full file is maintained: Git, BitKeeper

P icture courtesy of progit.org. All rights kindly reserved

Page 11: Geecon11 -  Git: a Gentle InTroduction

Most operations are local

Your local database contains a full copy of the remote(s)Browsing, changing, search happens locallyAlmost everything doable without network

the db is a nice, separate .git folder :)

Page 12: Geecon11 -  Git: a Gentle InTroduction

Integrity is a priority

Everything in Git is check-summedSHA-1 hash

40-character string such as 95b87297210672b16bb70ded20626c9c551ccd58

It's impossible to make a change without Git knowing it!

Git generally only adds data

Page 13: Geecon11 -  Git: a Gentle InTroduction

The thre e s tate s

modified

stagedcommitted

all local operations!

P icture courtesy of progit.org. All rights kindly reserved

Page 14: Geecon11 -  Git: a Gentle InTroduction

Quick demo!

Configuration Initializing a local

repositoryManaging files

Looking into history

Page 15: Geecon11 -  Git: a Gentle InTroduction

Local operations

Page 16: Geecon11 -  Git: a Gentle InTroduction

How does it work

Git has an internal object database

It containsblob (files)

commit tree

…and other stuff :)

Page 17: Geecon11 -  Git: a Gentle InTroduction

After a commit...

P icture courtesy of progit.org. All rights kindly reserved

Page 18: Geecon11 -  Git: a Gentle InTroduction

After three commits...

P icture courtesy of progit.org. All rights kindly reserved

Page 19: Geecon11 -  Git: a Gentle InTroduction

A branch is a pointer

P icture courtesy of progit.org. All rights kindly reserved

Page 20: Geecon11 -  Git: a Gentle InTroduction

Creating a branch

> git branch testing

P icture courtesy of progit.org. All rights kindly reserved

Page 21: Geecon11 -  Git: a Gentle InTroduction

HEAD

HEAD: a special pointer so Git knows where you are

P icture courtesy of progit.org. All rights kindly reserved

Page 22: Geecon11 -  Git: a Gentle InTroduction

Switching to a branch

Git moves HEAD pointerto the branch pointer

> git checkout testingSwitched to branch 'testing'

P icture courtesy of progit.org. All rights kindly reserved

Page 23: Geecon11 -  Git: a Gentle InTroduction

Change a file (on a branch)

Git keeps following with HEAD the branch pointer

> vi readme.txt> git commit -a -m 'readme file updated'

P icture courtesy of progit.org. All rights kindly reserved

Page 24: Geecon11 -  Git: a Gentle InTroduction

Switch to master

Git moves back HEAD to point to master

> git checkout master

P icture courtesy of progit.org. All rights kindly reserved

Page 25: Geecon11 -  Git: a Gentle InTroduction

And change again!> vi readme.txt> git commit -a -m 'readme file now rocks!'

Git still keeping separatepointers to the branches

P icture courtesy of progit.org. All rights kindly reserved

Page 26: Geecon11 -  Git: a Gentle InTroduction

Time to merge!

A new “merge” commit is generated

> git merge testingMerge made by recursive. 1 files changed, 1 instions(+), 0 dltions(-)

P icture courtesy of progit.org. All rights kindly reserved

Page 27: Geecon11 -  Git: a Gentle InTroduction

Remote operations

Page 28: Geecon11 -  Git: a Gentle InTroduction

What's a remote?

You can have multiple remote reposusually one, “origin”

sometimes one main r/w, other r/o,rarely multiple

Collaborating means pushing and pulling data from the remote repos

Page 29: Geecon11 -  Git: a Gentle InTroduction

Using a remote: clone

Move into an empty folder...

Different protocols are availablegit (native)http(s)ssh

You get a full copy of the repository

> git clone <url>

Page 30: Geecon11 -  Git: a Gentle InTroduction

(less usual) Add a remote

Move into an existing git folder...

Mostly used when working with multiple repositories

> git remote add <name> <url>

Page 31: Geecon11 -  Git: a Gentle InTroduction

Initial clone

P icture courtesy of progit.org. All rights kindly reserved

Page 32: Geecon11 -  Git: a Gentle InTroduction

How do it syncs?

“master” is tracked automatically“fetch” command will download all the updates from the

remote db“merge” to merge the branches

“rebase” (let's see this later)

“pull” is a shortcut for fetch + merge

Page 33: Geecon11 -  Git: a Gentle InTroduction

I do some work...

P icture courtesy of progit.org. All rights kindly reserved

Page 34: Geecon11 -  Git: a Gentle InTroduction

Someone else pushes!

P icture courtesy of progit.org. All rights kindly reserved

Page 35: Geecon11 -  Git: a Gentle InTroduction

Synchronize with fetch

P icture courtesy of progit.org. All rights kindly reserved

Page 36: Geecon11 -  Git: a Gentle InTroduction

What next?

Fetch is just fetching all the data, nothing changesTo update your master copy to the remote you may:

Merge

Rebase

You can have done a pull (fetch + merge)

Page 37: Geecon11 -  Git: a Gentle InTroduction

Merge!

Git uses an automatic three-ways merge algorithm very efficient :)

Most of the time it's a piece of cakeAny conflict not resolved automarically must be

resolved... by you (as usual!)

Page 38: Geecon11 -  Git: a Gentle InTroduction

Rebase!

First removes from the target branch the diverging commits

Then adds all the changes committed on the source other branch

Then adds your commits on top

Page 39: Geecon11 -  Git: a Gentle InTroduction

Rebase!

Afte r a

re base ,,,

P icture courtesy of progit.org. All rights kindly reserved

Page 40: Geecon11 -  Git: a Gentle InTroduction

Rebase!

No differences in resultMuch cleaner historyBranches are then easy to integrate to the master

Page 41: Geecon11 -  Git: a Gentle InTroduction

Quick demo!

Cloning a repo Fetching from a remoteMerging and rebasing

Page 42: Geecon11 -  Git: a Gentle InTroduction

Enterprise adoption

Page 43: Geecon11 -  Git: a Gentle InTroduction

Issues in the enterprise?

No security out of the boxsecure protocols are based on OS services

no way to restrict the access to a repository no way to lock a branchno audit

you can commit in behalf of someone else

Page 44: Geecon11 -  Git: a Gentle InTroduction

More issues in the enterprise!

No easy setup for users and groupsadministration is a pain (again based on the OS services)Only basic repository visualization (and nothing on the

remote)

Page 45: Geecon11 -  Git: a Gentle InTroduction

Solutions?

use a predefined solution on top of a *nix environmentgitolite (requires *nix os)gitosis (requires *nix os)

gerrit (not 100% git, but works well)

get an industrialized service/solutiongitenterprise (yeah, the shameless plug, finally!)Github-fi (guess what? now called github enterprise)

…not much more here :)

Page 46: Geecon11 -  Git: a Gentle InTroduction

Questions?