1. Git The fast version control system Jeroen Rosenberg jeroen.rosenberg@gmail.com
2. Table of contents Short introduction to version control Version control systems Comparison with subversion Distributed version control Git usage Basic operations Solving conflicts Branching as a core concept Tooling Conclusion Git - the fast version control system
4. Version control (1) The management of changes to documents, programs, and other information stored as computer files A system that maintains versions of files at progressive stages of development. Every file Has a full history of changes Can be restored to any version A communication tool, like email, but with code rather than human conversation Git - the fast version control system
6. Version control (2) Benefits Allows a team to share code Git - the fast version control system
7. Version control (2) Benefits Allows a team to share code Maintains separate “production” versions of code that are always deployable Git - the fast version control system
8. Version control (2) Benefits Allows a team to share code Maintains separate “production” versions of code that are always deployable Allows simultaneous development of different features on the same codebase Git - the fast version control system
9. Version control (2) Benefits Allows a team to share code Maintains separate “production” versions of code that are always deployable Allows simultaneous development of different features on the same codebase Keeps track of all old versions of files Git - the fast version control system
10. Version control (2) Benefits Allows a team to share code Maintains separate “production” versions of code that are always deployable Allows simultaneous development of different features on the same codebase Keeps track of all old versions of files Prevents work being overwritten Git - the fast version control system
11. Glossary Some commonly used terms explained before moving on Git - the fast version control system
12. Key terms in version control Branch acopy of a set of files under version control which may be developed at different speeds or in different ways Checkout to copy the latest version of (a file in) the repository to your working copy Commit to copy (a file in) your working copy back into the repository as a new version Merge to combine multiple changes made to different working copies of the same files in the repository Repository a (shared) database with the complete revision history of all files under version control Trunk the unique line of development that is not a branch Update to retrieve and integrate changes in the repository since the update. Working copy your local copies of the files under version control you want to edit Git - the fast version control system
14. Very limited and inflexible Concurrent Versions System (CVS) Git - the fast version control system
15. Very limited and inflexible Concurrent Versions System (CVS) Fills most of the holes found in CVS, but added nothing to its development model Subversion (SVN) Git - the fast version control system
16. Very limited and inflexible Concurrent Versions System (CVS) Fills most of the holes found in CVS, but added nothing to its development model Subversion (SVN) More feature rich and functional Git Git - the fast version control system
18. Comparison with SVN Subversion Centralized Git Distributed Git - the fast version control system
19. Comparison with SVN Subversion Centralized Branching can be a pain and is used sparingly Git Distributed Branching is very easy and is a core concept Git - the fast version control system
20. Comparison with SVN Subversion Centralized Branching can be a pain and is used sparingly Conflicts frequently occur and renaming is not handled well Git Distributed Branching is very easy and is a core concept Conflicts occur less frequent, renaming is properly handled Git - the fast version control system
21. Comparison with SVN Subversion Centralized Branching can be a pain and is used sparingly Conflicts frequently occur and renaming is not handled well Can be slow due to network latency Git Distributed Branching is very easy and is a core concept Conflicts occur less frequent, renaming is properly handled Very fast since less operations involve network latency Git - the fast version control system
22. Comparison with SVN Subversion Centralized Branching can be a pain and is used sparingly Conflicts frequently occur and renaming is not handled well Can be slow due to network latency Can consume quite some disk space Git Distributed Branching is very easy and is a core concept Conflicts occur less frequent, renaming is properly handled Very fast since less operations involve network latency Consumes 30 times less disk space Git - the fast version control system
24. A basic, centralized version control system Users commit changes to the central repository and a new version is born to be checked out by other users Git - the fast version control system
25. A distributed version control system Each user has a full local copy of the repository. Users commit changes and when they want to share it, the push it to the shared repository Git - the fast version control system
26. Git usage Basic operations Git - the fast version control system
28. Tracking a project.. Mirror the central server Anything the main repository can do, you can do! Git - the fast version control system
29. Tracking a project.. My project is tiny - git is overkill “Why would I carry a Swiss knife when I only want to open cans?” Git - the fast version control system
30. Tracking a project.. Tiny projects should be scalable too! “You wouldn’t use Roman digits just because you perform calculations with small numbers, now would you?” Tiny projects may grow beyond your expectations “One day you’ll desperately need that hex wrench and you’re stuck with your plain can-opener” Git - the fast version control system
31. Tracking a project.. Pretty straightforwarded, huh? Git - the fast version control system
32. Advanced committing… What if you screw up? #re-edit the metadata and update the tree $ git commit --amend or # toss your latest commit away without changing the working tree $ git reset HEAD^ Git - the fast version control system
34. Closer look at pulling.. Git - the fast version control system
35. Auto-merging.. What actually happens… # Fetch latest changes from origin $ git fetch # Merge fetched changes into current branch $ git merge refs/heads/master Git - the fast version control system
36.
37. can detect and handle renamesGit - the fast version control system
38. Resolving conflicts.. Suppose Jeff and Dan both made changes to the same line in file… CONFLICT (content): Merge conflict in file Automatic merge failed; fix conflicts and then commit the result. Uh oh…. now what? Git - the fast version control system
39. Resolving conflicts.. Well, just merge manually… # run your favourite file merge application $ git mergetool –t opendiff Git - the fast version control system
40. Git - the fast version control system source: http://gitguru.com
41. Resolving conflicts.. …and commit! # commit to resolve the conflict $ git commit Git - the fast version control system
44. Creating a branch.. Or create and switch to a branch based on another branch $ git checkout –b new_branch other_branch Git - the fast version control system
45. Some common scenarios… Git - the fast version control system Why would I require branching?
46. Scenario 1 – Interrupted workflow You’re finished with part 1 of a new feature but you can’t continue with part 2 before part 1 is released and tested Git - the fast version control system
47. Scenario 1 – Interrupted workflow You’re finished with part 1 of a new feature but you can’t continue with part 2 before part 1 is released and tested Git - the fast version control system
48. Scenario 2 – Quick fixes While you’re busy implementing some feature suddenly you’re being told to drop everything and fix a newly discovered bug Git - the fast version control system
49. Scenario 2 – Quick fixes While you’re busy implementing some feature suddenly you’re being told to drop everything and fix a newly discovered bug Git - the fast version control system
50. Git usage overview Just to summarize… Git - the fast version control system
51. Git command sequence Source: http://git.or.cz Git - the fast version control system
52. Tooling Stuck at ‘Ye Olde Terminal’? Not necessarily… Git - the fast version control system
60. Reasons to switch to Git Endless, easy, non-file-system-based, local branches Enhanced merging strategy Performance Advanced features enable better workflow Stashing temporary work Collaboration before public commits Git - the fast version control system
61. Closing and Q&A References Git: http://git-scm.com/download Git Docs: http://git-scm.com/documentation GitX: http://gitx.frim.nl/ TortoiseGit: http://code.google.com/p/tortoisegit/ Git Extensions: http://sourceforge.net/projects/gitextensions/ JGit / EGit: http://www.eclipse.org/egit/ Git - the fast version control system