geecon11 - git: a gentle introduction
Post on 23-Jan-2018
1.290 Views
Preview:
TRANSCRIPT
Agenda
About version controlConceptsWorking locally
Remote operations
Enterprise adoptionQ&A
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
About version control
P icture courtesy of globalnerdy.comAll rights kindly reserved
Centralized SCM
CVSSVN
P icture courtesy of progit.org. All rights kindly reserved
Distributed SCM
Git
MercurialBazaar
P icture courtesy of progit.org. All rights kindly reserved
Concepts
Concepts
Snapshots, not deltas
Nearly every operation is localIntegrity is a priority
The “three states”
Snapshot, not deltas
Deltas are maintained: CVS, SVN, Bazaar
P icture courtesy of progit.org. All rights kindly reserved
Snapshot, not deltas
Full file is maintained: Git, BitKeeper
P icture courtesy of progit.org. All rights kindly reserved
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 :)
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
The thre e s tate s
modified
stagedcommitted
all local operations!
P icture courtesy of progit.org. All rights kindly reserved
Quick demo!
Configuration Initializing a local
repositoryManaging files
Looking into history
Local operations
How does it work
Git has an internal object database
It containsblob (files)
commit tree
…and other stuff :)
After a commit...
P icture courtesy of progit.org. All rights kindly reserved
After three commits...
P icture courtesy of progit.org. All rights kindly reserved
A branch is a pointer
P icture courtesy of progit.org. All rights kindly reserved
Creating a branch
> git branch testing
P icture courtesy of progit.org. All rights kindly reserved
HEAD
HEAD: a special pointer so Git knows where you are
P icture courtesy of progit.org. All rights kindly reserved
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
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
Switch to master
Git moves back HEAD to point to master
> git checkout master
P icture courtesy of progit.org. All rights kindly reserved
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
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
Remote operations
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
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>
(less usual) Add a remote
Move into an existing git folder...
Mostly used when working with multiple repositories
> git remote add <name> <url>
Initial clone
P icture courtesy of progit.org. All rights kindly reserved
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
I do some work...
P icture courtesy of progit.org. All rights kindly reserved
Someone else pushes!
P icture courtesy of progit.org. All rights kindly reserved
Synchronize with fetch
P icture courtesy of progit.org. All rights kindly reserved
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)
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!)
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
Rebase!
Afte r a
re base ,,,
P icture courtesy of progit.org. All rights kindly reserved
Rebase!
No differences in resultMuch cleaner historyBranches are then easy to integrate to the master
Quick demo!
Cloning a repo Fetching from a remoteMerging and rebasing
Enterprise adoption
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
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)
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 :)
Questions?
Thanks!
Twitter: @bbossolaEmail: bbossola@jugtorino.it
top related