GIT BASICS
by Ariejan de Vroom – Kabisa ICT
WHAT THE GIT?!

“I'm an egotistical bastard, and I name all my projects after
       myself. First Linux, now git.” – Linu...
GET GIT!
http://git-scm.com/
SURVEY

• Who is NOT using version control?
• SubVersion?
• Anything else?
WHY GIT?!
• Distributed Repositories
• Non-linear Development
• Very fast branching and merging
• Toolkit Design
• Scales
...
LET’S ROCK!

~/gitbasics $ git init
Initialized empty Git repository
in /Users/ariejan/gitbasics/.git/
LET’S ROLL!

~/gitbasics $ git clone
git@github.com/ariejan/gitbasics.git
~/gitbasics $ echo quot;Live long and prosperquot; > README
~/gitbasics $ git add README
~/gitbasics $ git commit -m quot;...
WHAT JUST HAPPENED?

~/gitbasics $ git log

commit 8e60b09d3082e9473944075cc01b3b67bb97d5c3
Author: Ariejan de Vroom <arie...
HOW GIT WORKS
    Working Directory

              git add


      Staging Area

              git commit


      Reposito...
WORKFLOW

• Hack! ( TextMate, vim, ... )
• Stage your changes ( git add )
• Review your changes ( git status | diff )
• Co...
USING BRANCHES

• Very, very fast
• Keep different code paths separate
• Try new things
• Atomic merges!
SURVEY

• How many of you use branching?
• Do you work exclusively on trunk/master?
• NEVER work on trunk/master?
BRANCHING

c1   c2   c3   c4




          c5   c6
LET’S BRANCH!
~/gitbasics $ git checkout -b new_feature
Switched to a new branch quot;new_featurequot;

~/gitbasics $ git ...
MERGING

• Merge two branches together
• Add new features
• Add bugs fixes
MERGING

c1   c2   c3   c4   c7




          c5   c6
MERGING

~/gitbasics $ git checkout master
Switched to branch quot;masterquot;

~/gitbasics $ git merge new_feature
REBASING

• Bring a branch up-to-date
• Rebasing is rewriting history!
• Don’t use rebasing on a branch you’re
  sharing!
REBASING

c1   c2    c3    c4




           c3’   c4’   c5   c6
REBASING

~/gitbasics $ git checkout new_feature
Switched to branch quot;new_featurequot;

~/gitbasics $ git rebase master
REMOTE

• Store and share your code!
 • github.com
 • gitosis ( self-managed over SSH )
PUSH

~/gitbasics $ git add origin git@github.com/ariejan/
gitbasics.git

~/gitbasics $ git push origin master
FETCH / PULL


~/gitbasics $ git fetch origin

~/gitbasics $ git pull origin master
WORKFLOW
             Working Directory

add


                Staging Area

                          checkout   merge
 c...
TAGGING


• Mark a point in history
• Optionally sign it cryptographically with
  GnuPG
TAGGING
      v1.0




c1    c2     c3   c4
TAGGING

~/gitbasics $ git tag -a -m quot;Tag v1.0quot; v1.0
Switched to branch quot;new_featurequot;

~/gitbasics $ git t...
BISECTING


• Binary search for a bad commit
• Find out where it when wrong (and who to
  blame)
BISECTING

     v1.0        Good or Bad?



c1   c2     c3   c4        c5   c6   c7
BISECTING
~/gitbasics $ git bisect start
~/gitbasics $ git bisect bad
~/gitbasics $ git bisect good v1.0

~/gitbasics $ gi...
RELEASE
    MANAGEMENT

• Manage your DTSP environments
• Branches to the rescue!
RELEASE
             MANAGEMENT

~/gitbasics $ git branch production master

~/gitbasics $ git push origin production

~/g...
RELEASE
             MANAGEMENT

~/gitbasics $ git checkout production

~/gitbasics $ git rebase master

~/gitbasics $ git...
TAGGING RELEASES

~/gitbasics $ git checkout master

~/gitbasics $ git tag -a -m quot;Tag v1.0.3quot; v1.0.3
~/gitbasics $...
THE STASH


• Stash away uncommited changes
• Ideal for quick bug fixes!
THE STASH
~/gitbasics $ git status
#	 modified:   README

~/gitbasics $ git stash
~/gitbasics $ git status
nothing to comm...
CONFLICTS

• Conflicts happen
• Git is clever
• Easy to resolve manually
• Merges are atomic!
CONFLICTS
~/gitbasics $ git merge awesome_feature
Auto-merged README
CONFLICT (content): Merge conflict in README
Automati...
.GITIGNORE

• Specify which files to keep out of git
 • Location specific configuration
 • Generated files
 • Binary build files
.GITIGNORE

~/gitbasics $ cat .gitignore
config/database.yml
log/*.log
tmp/*
public/system/uploads/*
SURVEY


• Who is going to try Git?
• Stick with SubVersion?
WE’RE HIRING!
  AWESOME CODERS


  recruitment@kabisa.nl
THANKS!

Slides will be posted to http://slideshare.net/ariejan
          Contact me at ariejan@kabisa.nl
Git Basics - RubyFest 2009
Upcoming SlideShare
Loading in...5
×

Git Basics - RubyFest 2009

5,100

Published on

A gentle introduction to the awesomeness of Git as presented a RubyFest, may 2009.

Published in: Technology
1 Comment
32 Likes
Statistics
Notes
  • great introduction to git
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
5,100
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
0
Comments
1
Likes
32
Embeds 0
No embeds

No notes for slide













































  • Git Basics - RubyFest 2009

    1. 1. GIT BASICS by Ariejan de Vroom – Kabisa ICT
    2. 2. WHAT THE GIT?! “I'm an egotistical bastard, and I name all my projects after myself. First Linux, now git.” – Linus Torvalds
    3. 3. GET GIT! http://git-scm.com/
    4. 4. SURVEY • Who is NOT using version control? • SubVersion? • Anything else?
    5. 5. WHY GIT?! • Distributed Repositories • Non-linear Development • Very fast branching and merging • Toolkit Design • Scales • Cryptographic authentication of history.
    6. 6. LET’S ROCK! ~/gitbasics $ git init Initialized empty Git repository in /Users/ariejan/gitbasics/.git/
    7. 7. LET’S ROLL! ~/gitbasics $ git clone git@github.com/ariejan/gitbasics.git
    8. 8. ~/gitbasics $ echo quot;Live long and prosperquot; > README ~/gitbasics $ git add README ~/gitbasics $ git commit -m quot;Added READMEquot; [master (root-commit)]: created 8e60b09: quot;Added READMEquot; 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 README
    9. 9. WHAT JUST HAPPENED? ~/gitbasics $ git log commit 8e60b09d3082e9473944075cc01b3b67bb97d5c3 Author: Ariejan de Vroom <ariejan@ariejan.net> Date: Mon May 11 21:51:24 2009 +0200 Added README
    10. 10. HOW GIT WORKS Working Directory git add Staging Area git commit Repository
    11. 11. WORKFLOW • Hack! ( TextMate, vim, ... ) • Stage your changes ( git add ) • Review your changes ( git status | diff ) • Commit (locally) ( git commit ) • Repeat
    12. 12. USING BRANCHES • Very, very fast • Keep different code paths separate • Try new things • Atomic merges!
    13. 13. SURVEY • How many of you use branching? • Do you work exclusively on trunk/master? • NEVER work on trunk/master?
    14. 14. BRANCHING c1 c2 c3 c4 c5 c6
    15. 15. LET’S BRANCH! ~/gitbasics $ git checkout -b new_feature Switched to a new branch quot;new_featurequot; ~/gitbasics $ git branch master * new_feature ~/gitbasics $ git checkout master Switched to branch quot;masterquot; ~/gitbasics $ git branch -d feature3 Deleted branch feature3
    16. 16. MERGING • Merge two branches together • Add new features • Add bugs fixes
    17. 17. MERGING c1 c2 c3 c4 c7 c5 c6
    18. 18. MERGING ~/gitbasics $ git checkout master Switched to branch quot;masterquot; ~/gitbasics $ git merge new_feature
    19. 19. REBASING • Bring a branch up-to-date • Rebasing is rewriting history! • Don’t use rebasing on a branch you’re sharing!
    20. 20. REBASING c1 c2 c3 c4 c3’ c4’ c5 c6
    21. 21. REBASING ~/gitbasics $ git checkout new_feature Switched to branch quot;new_featurequot; ~/gitbasics $ git rebase master
    22. 22. REMOTE • Store and share your code! • github.com • gitosis ( self-managed over SSH )
    23. 23. PUSH ~/gitbasics $ git add origin git@github.com/ariejan/ gitbasics.git ~/gitbasics $ git push origin master
    24. 24. FETCH / PULL ~/gitbasics $ git fetch origin ~/gitbasics $ git pull origin master
    25. 25. WORKFLOW Working Directory add Staging Area checkout merge commit Repository pull push fetch Remote
    26. 26. TAGGING • Mark a point in history • Optionally sign it cryptographically with GnuPG
    27. 27. TAGGING v1.0 c1 c2 c3 c4
    28. 28. TAGGING ~/gitbasics $ git tag -a -m quot;Tag v1.0quot; v1.0 Switched to branch quot;new_featurequot; ~/gitbasics $ git tag v1.0 ~/gitbasics $ git push --tags
    29. 29. BISECTING • Binary search for a bad commit • Find out where it when wrong (and who to blame)
    30. 30. BISECTING v1.0 Good or Bad? c1 c2 c3 c4 c5 c6 c7
    31. 31. BISECTING ~/gitbasics $ git bisect start ~/gitbasics $ git bisect bad ~/gitbasics $ git bisect good v1.0 ~/gitbasics $ git bisect bad | good ~/gitbasics $ git bisect reset ~/gitbasics $ git bisect start HEAD v1.0
    32. 32. RELEASE MANAGEMENT • Manage your DTSP environments • Branches to the rescue!
    33. 33. RELEASE MANAGEMENT ~/gitbasics $ git branch production master ~/gitbasics $ git push origin production ~/gitbasics $ git checkout --track -b production origin/production
    34. 34. RELEASE MANAGEMENT ~/gitbasics $ git checkout production ~/gitbasics $ git rebase master ~/gitbasics $ git push origin production
    35. 35. TAGGING RELEASES ~/gitbasics $ git checkout master ~/gitbasics $ git tag -a -m quot;Tag v1.0.3quot; v1.0.3 ~/gitbasics $ git push --tags ~/gitbasics $ git checkout production ~/gitbasics $ git rebase v1.0.3 ~/gitbasics $ git push origin production
    36. 36. THE STASH • Stash away uncommited changes • Ideal for quick bug fixes!
    37. 37. THE STASH ~/gitbasics $ git status # modified: README ~/gitbasics $ git stash ~/gitbasics $ git status nothing to commit # Hack, stage, review, commit, etc. ~/gitbasics $ git stash pop ~/gitbasics $ git status # modified: README
    38. 38. CONFLICTS • Conflicts happen • Git is clever • Easy to resolve manually • Merges are atomic!
    39. 39. CONFLICTS ~/gitbasics $ git merge awesome_feature Auto-merged README CONFLICT (content): Merge conflict in README Automatic merge failed; fix conflicts and then commit the result. ~/gitbasics $ vim README ~/gitbasics $ git add README ~/gitbasics $ git commit -m “fixed merge conflict”
    40. 40. .GITIGNORE • Specify which files to keep out of git • Location specific configuration • Generated files • Binary build files
    41. 41. .GITIGNORE ~/gitbasics $ cat .gitignore config/database.yml log/*.log tmp/* public/system/uploads/*
    42. 42. SURVEY • Who is going to try Git? • Stick with SubVersion?
    43. 43. WE’RE HIRING! AWESOME CODERS recruitment@kabisa.nl
    44. 44. THANKS! Slides will be posted to http://slideshare.net/ariejan Contact me at ariejan@kabisa.nl

    ×