Git Foundations - From Novice to Guru
Course length: 5 days
Dozens of commands! Hundreds of options! Git has dumbfounded sysadmins and developers alike since its appearance in 2005.
And yet, this ingenious software is among the most fantastically useful ever developed.
Learn Git from the ground up and the inside out with Git Foundations Training!
This class explores Git's internals in depth and includes practical exercises to gain familiarity and comfort in handling the nuts and bolts. It also covers collaboration with GitLab, which adds a powerful GUI and many features for software development.
Intended audience: Anyone who needs to use Git. The only requirement is familiarity with the Linux command line environment and ability to use a text editor.
Take Back to Work: Complete mastery of Git basics and the ability to comfortably and efficiently collaborate with Git. Also, ability to read and understand Git man pages.
Part I: Mastering the Basics
Theory - Mastering the Basics
This 15-30 minute section introduces the subject of version control and covers precise definitions for the most basic terminology to be used in the course.
This section introduces the basics of Graph Theory in sufficient depth to fully grasp the structure of Git internals.
This section covers the storage model of Git in detail, including the theoretical aspect (structure) of merge commits.
Orientation: "The determination of the relative position of something or someone (especially oneself)." This section covers the structure of Git branches and how the working directory relates to Git's internals.
Practical - Mastering the Basics
The practical section for Part I includes several hours of hands-on exercises, interspersed with question and answer periods and discussions. The exercises explore Git's internals in detail and allow students to link the theory learned so far to command line usage of Git, and why each command works as it does.
Students learn to navigate the history of a Git repository, to stage and commit files, to discard changes, to compare versions of files or projects, to branch out and to discard or merge branches, and how to easily handle merge conflicts.
Practicals are done with plain text files, not programming source code, to keep the focus on learning Git - not on learning programming.
Part II - Basic Collaboration
- What is a remote?
- Cloning a repository
- Remote branches
- Remote tracking branches
- Fetching changes
- Merging in changes from upstream
- Pushing to a different branch
- Rebasing before you push
Part III - Beyond the Basics
- Comparing branchines
- Pruning no-longer-needed branches
- Interactive rebasing
- Cherry-picking commits
- Reverting commits
- Pre- and post-commit hooks
- Garbage collection
Part IV - GitLab
- Merge Requests
- Bonus section: Integrating changes from a merge request with a messy history
- Protected Branches
- Forks or unprotected branches for merge requests
- Cross-referencing (commits/issues/merge requests)
- Continuous Integration
We just started to use git ... We learned what we know by reading docs and scraping together a working solution. Taking your class reinforced the things we have done right and offered a number of ways to improve our environment. Especially interesting: graph theory (intro), log/history graphical output, various forms of diff.
—David Brezynski, Unix/Linux Systems Administrator
Great class! Enjoyed the theory in the beginning.
—Jeremiah Jester, Systems Administrator
Thank you again for the great workshop! It was great to be able to get a deeper understanding about Git. Even though I knew about Git beforehand, just understanding more about the way it works and the definitions and machinations behind it really transformed my knowledge and usage of it. Especially considering back then I used Git without really understanding it, I really can conceptualize how it works and can't wait to apply it to future projects. Thank you for the great workshop, and I look forward to learning more.
—Kevin Nguyen, Systems Engineer
Your methods of explaining and getting everybody involved was really great. I liked the way you went about explaining the background as well as the related Git terminologies. Although, you have not gone into any Git commands I can already see the benefits of these kind of training in my daily job functions. I've only used a few Git commands, so I am looking forward to maximize my Git knowledge with your future sessions.
--Sonny Trang, Cloud Automation Engineer
It was very well explained so it really helped get a deeper understanding of the tool.
—Gustavo Ardila, Systems Administrator
You definitely filled out some conceptual holes.
—Stephen Franklin, Systems Engineer
I liked that it was approachable and assumed no prior knowledge.
—Eric White, Senior System Engineer
I was able to understand the explanations even as a student with limited technical knowledge.
—Eric, California Community College Student
This talk has something to offer for most Git users. It's not a run of the mill "how to use" Git presentation.
—Jordan Schwartz, Systems / Storage Engineer
It's very important to understand how Git works and what is the role of the .git directory and the files under it.
—Ionut Cadariu, Infrastructure Engineer
I've been using Git for years now, but only really understood enough to get my job done - checking in code, merging branches, tagging releases. It was really nice to understand what Git is actually doing internally when I issue those commands.
—George Wu, Vice President of Engineering
It was a fantastic class on Git internals. Mike obviously worked really hard to structure the material in a logical progression of definitions and concepts and really engaged the audience. I now understand DAGs, trees, blobs, objects and commits more thoroughly than I have before.
—Lan, San Gabriel Valley LUG organizer
Mike, thank you so much for giving an excellent presentation! You clearly know Git from top to bottom. Even better, you did a great job of presenting information, explaining concepts, and answering questions -- all in a very interesting way.
—Rick, San Gabriel Valley LUG member