Quick Git overview presented at a Rackspace Tech Night - it is not a tutorial, no previous knowledge is required, we are simply looking to introduce the concepts of version control and cover some good practice steps when dealing with repositories.
2. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Git repositories are not linear
– Branching already supported
•Branches are trees of trees
•Visualise
– The state of your repository as a point in a high-
dimensional „code-space‟
– Branches are represented as n-dimensional
membranes
– Map the spatial loci of successive commits onto the
projected manifold of each cloned repository
The Simple Stuff
2
7. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Purpose
– Introduce distributed version control concept
– Generate some Git interest
• Depending on use will lead to:
– awe
– fear
– hate
– suffering
• Pass on the stories, don‟t be „that‟ guy
– Some useful concepts
• Branch, merge, rebase, amend
Scope
7
8. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•This is not a…
– Git tutorial
• Plenty of resources out there
– See „Resources‟ section
• Service providers and projects vary
• That said…
– If there is enough interest
• Perhaps a fully-fledged „enabler‟ tech night
• “Dude, what the hell is Jenkins and how do I integrate Git
with it?”
• What is this Selenium and SauceLabs business about?”
Scope
8
9. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•This is not a…
– GitHub tutorial
• There are alternatives
Scope
9
11. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Record changes to resources
– Not limited to software code
• e.g. Wiki article versioning
•Recall specific versions
– Revert to previous state
• File
• Image
• Project
•Tracking
– Revision numbers (e.g. 1.0.1, r3893, etc.)
Version Control - What
11
12. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Local
– Copy to another directory
– Patching mechanism
• Recovery based on revision sets
• “It‟s so simple” (!)
– What if?
• Forget where it is stored
• Overwrite wrong file
• Database is corrupted
• Datacentre blows up
Version Control - How
12
13. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Centralised
– Collaborator count > 1
– Client-server model
– Due diligence
• Auditing capabilities
– Access control
– What if?
• Network connection has high latency
• Server fails
• Datacentre blows up
Version Control - How
13
14. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Distributed
– Full mirror
• Clients can restore content to server
• Every copy is a backup
– Hierarchy options
• Cross-system collaboration
– What if?
• Attempt to break it
• Datacentre blo…oh, wait
Version Control - How
14
16. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Linux kernel developers abandoned BitKeeper
– BitMover alleges reverse-engineering of protocols
– Withdraws free use
•Linus Torvalds sets out to write one
– Existing systems do not meet requirements
•Emphasis on speed
– Patch the Linux kernel tree at a set rate
•Avoid conventional approaches
– Do the opposite of what CVS did
– Name it „git‟ – Torvalds refers to himself as one (!)
Birth of Git
16
19. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Distributed Version Control System (DVCS)
– Fast version control
– Cheap local branching
– Easy to learn
•Arguable – some experience required to leverage the more
useful features
– Influenced by BitKeeper and Monotone concepts
•Source Code Management (SCM) principles
– Change identification via „revision number‟
• Keep an eye out for those alphanumeric strings…
Git Features
19
20. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Some goals
– Fast
• Must handle patching of the Linux kernel source/tree
– Fully distributed
• In case the datacentre blows up
– Simple design
• Compatibility with existing systems and protocols
– Strong non-linear development orientation
• Rapid branching and merging
• Thousands of parallel branches
Git Features
20
22. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•“Think locally not globally (!)”
– Most operations require local files/resources only
•Integrity
– Checksum all the things
•Generally only add data (apologies to Bruce Lee)
– Almost everything has an undo action
•The Three States
– Committed
– Modified
– Staged
Git Features
22
24. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Diverge and fix (or break) stuff
•Main line of development unaffected
•Cheap to use branches
– Writing 41 bytes to a file
– Old school methods used to copy everything :-/
•Basic merge process
– Identify best common ancestor
– Three-way merge (new snapshot)
– Merged work in a new commit object
Good to Know - Branch
24
29. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Things do not always go smoothly
•Merge a branch with the master
– Same object changed in multiple branches
– Attempt to merge leads to conflict
– „git status‟ shows the list of unmerged objects
– Conflicts are marked
•Pick the one you want
Good to Know - Conflicts
29
30. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
<<<<<<< HEAD:somefile.ext
Go away!
=======
Please go away!
>>>>>>> mybranch:somefile.ext
Good to Know - Conflicts
30
31. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Effectively – patching
•Process
– Grab a diff of each commit
– Store in temp files
– Reset current branch as rebase target
– Apply changes in turn
•Just one rule to remember
– “Do not rebase commits that you have pushed to a
public repository”
Good to Know - Rebase
31
35. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Rewrite history every once in a while
•“Dude, I don‟t want to look like an idiot”
•„git commit --amend‟
– Change the commit message
– Add or remove objects
•This is a mini-rebase
– Keep the perils of rebasing in mind
Good to Know - Amend
35
36. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Fork a repo
•Track changes in parent repo („git remote‟)
– Commits can be quickly pulled back into the fork
•Create a branch in the fork („git branch)
– Keeps the forked repo clean (see previous point)
•Modify branch and push back („git push‟)
•Test your changes
– Generally recommended unless you take rejection well
•Pull request to parent repo from your branch
Good Practice
36
38. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•May be referred to as “Git as a Service”
•Generally public and private repositories
•May offer multiple SCM offerings
•Additional services
– Code review
– Issue tracking
– Wiki
GaaS for the Masses
38
39. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Most popular source code repo site
– Social networking concepts
•Public and private repos
•Free (well…)
– Up to a point
– No private repos for the free plan
•Enterprise offering available
– Bring GitHub to your own servers
– Rackspace makes use of it
– Not exactly cheap (!)
GitHub
39
40. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Source code in GitHub o_0
•Free (kind of…)
– Self-hosted – you still need a server to run it on
•GitLab Cloud
– Hosted GitLab
– Unlimited private repos (10 users)
•GitLab CI
– Almost-native CI service
GitLab
40
41. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•Free (almost…)
– Up to 5 users
•Unlimited private repos
•Offers Mercurial support
– Start-up that was acquired
– Atlassian introduced Git support in 2011
•Enterprise offering available
– Cheaper than GitHub (at the time of writing)
•“Built for JIRA”
– Stick a #resolve in your commit message
Bitbucket
41
43. RACKSPACE® HOSTING | WWW.RACKSPACE.COM
•The Git SCM book
– From the horses mouth
– Thank you for the images used in this deck
– http://git-scm.com/book
•Vogella Git Tutorial
– Lars Vogel
– http://vogella.com/articles/Git/
•Git for computer scientists
– If you‟re all about pointers
–http://eagain.net/articles/git-for-computer-scientists/
Resources
43