Git primer


Published on

A brief introduction to distributed version control with git.
Shamelessly adapted from Scott Chacon's excellent "Getting Git" talk:

Published in: Education, Technology, Business
1 Comment
No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide
  • Inspired by:Getting Git by Scott Chacon — git Community Book — Larry the Cable Guy
  • Git primer

    1. 1. gitr’ done!<br />A brief introduction to<br />distributed version control with git<br />Oscar Nierstrasz — University of Bern —<br />
    2. 2. Why git?<br />
    3. 3. Bob<br />
    4. 4. Bob<br />Carol<br />
    5. 5. Bob<br />Carol<br />Alice<br />Ted<br />
    6. 6. Bob<br />Carol<br />Alice<br />Ted<br />A recipe for disaster!<br />
    7. 7. The git object model<br />
    8. 8. A “blob” is content under version control (a file)<br />blob<br />
    9. 9. You can have trees of blobs<br />(directories of files)<br />tree<br />blob<br />tree<br />blob<br />blob<br />
    10. 10. A “commit” is a tree of blobs<br />(a set of changes)<br />commit<br />tree<br />blob<br />tree<br />blob<br />blob<br />
    11. 11. Most commits modify (or merge) earlier commits<br />commit<br />commit<br />tree<br />tree<br />blob<br />blob<br />tree<br />blob<br />blob<br />
    12. 12. You can “tag” an interesting commit<br />tag<br />commit<br />commit<br />tree<br />tree<br />blob<br />blob<br />tree<br />blob<br />blob<br />
    13. 13. A graph of commits may belong to a branch<br />branch<br />tag<br />commit<br />commit<br />tree<br />tree<br />blob<br />blob<br />tree<br />blob<br />blob<br />
    14. 14. HEAD<br />“HEAD “is the current branch<br />branch<br />tag<br />commit<br />commit<br />tree<br />tree<br />blob<br />blob<br />tree<br />blob<br />blob<br />
    15. 15. HEAD<br />branch<br />commit<br />commit<br />Let’s focus on commits and branches<br />
    16. 16. Basic git<br />
    17. 17. Create a git repo<br />HEAD<br />mkdir repo<br />cd repo<br />git init<br />master<br />C0<br />
    18. 18. Tell git to “stage” changes<br />HEAD<br />git add …<br />master<br />C0<br />
    19. 19. HEAD<br />Commit your changes<br />master<br />C1<br />git commit …<br />C0<br />
    20. 20. Collaborating<br />
    21. 21. John<br />Jane<br />Public repo<br />Local repo<br />Local repo<br />master<br />C1<br />C0<br />
    22. 22. John<br />Jane<br />Public repo<br />Local repo<br />Local repo<br />git clone …<br />master<br />master<br />master<br />C1<br />C1<br />C1<br />C0<br />C0<br />C0<br />git clone …<br />
    23. 23. John<br />Jane<br />Public repo<br />Local repo<br />Local repo<br />master<br />master<br />master<br />C1<br />C2<br />C3<br />C0<br />C1<br />C1<br />C0<br />C0<br />git add …<br />git commit …<br />git add …<br />git commit …<br />
    24. 24. John<br />Jane<br />Public repo<br />Local repo<br />Local repo<br />git pull<br />master<br />master<br />master<br />C1<br />C2<br />C3<br />C0<br />C1<br />C1<br />C0<br />C0<br />(nothing new to pull)<br />
    25. 25. John<br />Jane<br />Public repo<br />Local repo<br />Local repo<br />git push<br />master<br />master<br />master<br />C2<br />C2<br />C3<br />C1<br />C1<br />C1<br />C0<br />C0<br />C0<br />
    26. 26. John<br />Jane<br />Public repo<br />Local repo<br />Local repo<br />git fetch<br />master<br />master<br />master<br />C2<br />C2<br />C3<br />C2<br />C1<br />C1<br />C1<br />C0<br />C0<br />C0<br />
    27. 27. John<br />Jane<br />Public repo<br />Local repo<br />Local repo<br />git merge<br />master<br />master<br />master<br />C2<br />C4<br />C2<br />C3<br />C2<br />C1<br />C1<br />C1<br />C0<br />C0<br />C0<br />NB:git pull = fetch + merge<br />
    28. 28. John<br />Jane<br />Public repo<br />Local repo<br />Local repo<br />git push<br />master<br />master<br />master<br />C4<br />C4<br />C2<br />C3<br />C2<br />C3<br />C2<br />C1<br />C1<br />C1<br />C0<br />C0<br />C0<br />
    29. 29. John<br />Jane<br />Public repo<br />Local repo<br />Local repo<br />git pull<br />master<br />master<br />master<br />C4<br />C4<br />C4<br />C3<br />C3<br />C2<br />C2<br />C3<br />C2<br />C1<br />C1<br />C1<br />C0<br />C0<br />C0<br />
    30. 30. Branching and merging<br />
    31. 31. “origin” refers to the remote repo<br />HEAD<br />master<br />origin/master<br />C1<br />C0<br />
    32. 32. HEAD<br />master<br />…<br />git commit …<br />origin/master<br />C2<br />C1<br />C0<br />
    33. 33. git branch tryout<br />HEAD<br />tryout<br />master<br />origin/master<br />C2<br />C1<br />C0<br />
    34. 34. git checkout tryout<br />HEAD<br />tryout<br />master<br />origin/master<br />C2<br />C1<br />NB:git checkout –b … = branch + checkout<br />C0<br />
    35. 35. HEAD<br />tryout<br />master<br />git commit …<br />C3<br />origin/master<br />C2<br />C1<br />C0<br />
    36. 36. HEAD<br />tryout<br />master<br />C3<br />C5<br />origin/master<br />C2<br />C1<br />origin/idea<br />C4<br />C6<br />C0<br />git fetch origin<br />
    37. 37. git merge origin/master origin/idea<br />HEAD<br />tryout<br />C7<br />master<br />C3<br />origin/master<br />C5<br />C2<br />C1<br />C4<br />C6<br />C0<br />origin/idea<br />
    38. 38. git checkout master<br />tryout<br />HEAD<br />C7<br />master<br />C3<br />origin/master<br />C5<br />C2<br />C1<br />C4<br />C6<br />C0<br />origin/idea<br />
    39. 39. git merge<br />HEAD<br />tryout<br />master<br />C7<br />C8<br />C3<br />origin/master<br />C5<br />C2<br />C1<br />C4<br />C6<br />C0<br />origin/idea<br />
    40. 40. git push<br />HEAD<br />tryout<br />master<br />C7<br />origin/master<br />C8<br />C3<br />C5<br />C2<br />C1<br />C4<br />C6<br />C0<br />origin/idea<br />
    41. 41. More to git<br />
    42. 42. More to git …<br />Merging and mergetool<br />Squashing commits when merging<br />Resolving conflicts<br />User authentication with ssh<br />gitx and other graphical tools<br />git configure — remembering your name<br />git remote — multiple remote repos<br />github — an open source public repo<br />…<br />
    43. 43. Resources<br /><br /><br /><br /><br /><br />
    44. 44. License<br />Attribution-ShareAlike 2.5<br />You are free:<br /><ul><li>to copy, distribute, display, and perform the work
    45. 45. to make derivative works
    46. 46. to make commercial use of the work</li></ul>Under the following conditions:<br />Attribution. You must attribute the work in the manner specified by the author or licensor.<br />Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one.<br /><ul><li>For any reuse or distribution, you must make clear to others the license terms of this work.
    47. 47. Any of these conditions can be waived if you get permission from the copyright holder.</li></ul>Your fair use and other rights are in no way affected by the above.<br /><br />