Git and Github for Source Code Control

Course:  GITSCC
Duration:  4 Days
Level:  I
Course Summary

This course teaches the student how to use Git and Github for tracking, branching, merging, and managing code revisions. Through a series of lectures and workshops, this course takes the student from Git fundamentals to advanced techniques, and provides direction for navigating the many functions of this open source version control system.

« Hide The Details
Topics Covered In This Course

The Big Picture

  • Background
  • The Birth of Git
  • Precedents
  • Timeline
  • What?s in a Name?

Installing Git

  • Using Binary Distributions
  • Obtaining a Source Release
  • Building and Installing
  • Installing Git on Windows

Getting Started

  • The Git Command Line
  • Quick Introduction to Using Git
  • Configuration Files
  • Inquiry
  • View Sample

Basic Git Concepts

  • View Sample
  • Basic Concepts
  • View Sample
  • Object Store Pictures
  • View Sample
  • Git Concepts at Work

File Management and the Index

  • It?s All About the Index
  • File Classifications in Git
  • Using git add
  • Some Notes on Using git commit
  • Using git rm
  • Using git mv
  • A Note on Tracking Renames
  • The .gitignore File
  • A Detailed View of Git?s Object Model and Files


  • Atomic Changesets
  • Identifying Commits
  • Commit History
  • Finding Commits


  • Reasons for Using Branches
  • Branch Names
  • Using Branches
  • Creating Branches
  • Listing Branch Names
  • Viewing Branches
  • Checking out Branches
  • Deleting Branches


  • Forms of the git diff Command
  • Simple git diff Example
  • git diff and Commit Ranges
  • git diff with Path Limiting
  • Comparing How Subversion and Git Derive diffs


  • Merge Examples
  • Working with Merge Conflicts
  • Merge Strategies
  • How Git Thinks About Merges

Altering Commits

  • Caution About Altering History
  • Using git reset
  • Using git cherry-pick
  • Using git revert
  • reset, revert, and checkout
  • Changing the Top Commit
  • Rebasing Commits

Remote Repositories

  • Repository Concepts
  • Referencing Other Repositories
  • Example Using Remote Repositories
  • Remote Repository Development Cycle in Pictures
  • Remote Configuration
  • Working with Tracking Branches
  • Adding and Deleting Remote Branches
  • Bare Repositories and git push

Repository Management

  • A Word About Servers
  • Publishing Repositories
  • Repository Publishing Advice
  • Repository Structure
  • Living with Distributed Development
  • Knowing Your Place
  • Working with Multiple Repositories


  • Why Use Patches?
  • Generating Patches
  • Mailing Patches
  • Applying Patches
  • Bad Patches
  • Patching Versus Merging


  • Installing Hooks
  • Available Hooks

Combining Projects

  • The Old Solution: Partial Checkouts
  • The Obvious Solution: Import the Code into Your Project
  • The Automated Solution: Checking out Subprojects Using Custom Scripts
  • The Native Solution: gitlinks and git submodule

Submodule Best Practices

  • Submodule Commands
  • Why Submodules?
  • Submodules Preparation
  • Why Read Only?
  • Why Not Read Only?
  • Examining the Hashes of Submodule Commits
  • Credential Reuse
  • Use Cases
  • Multilevel Nesting of Repos
  • Submodules on the Horizon

Using Git with Subversion Repositories

  • A Shallow Clone of a Single Branch
  • Pushing, Pulling, Branching, and Merging with git svn
  • Miscellaneous Notes on Working with Subversion

Advanced Manipulations

  • Using git filter-branch
  • rev-list
  • Interactive Hunk Staging
  • Recovering a Lost Commit

Tips, Tricks, and Techniques

  • Interactive Rebase with a Dirty Working Directory
  • Remove Left-Over Editor Files
  • Garbage Collection
  • Split a Repository
  • Tips for Recovering Commits
  • Subversion Conversion Tips
  • Manipulating Branches from Two Repositories
  • Recovering from an Upstream Rebase
  • Make Your Own Git Command
  • Quick Overview of Changes
  • Cleaning Up
  • Using git-grep to Search a Repository
  • Updating and Deleting refs
  • Following Files that Moved
  • Keep, But Don?t Track, This File
  • Have You Been Here Before?

Git and GitHub

  • Repo for Public Code
  • Creating a GitHub Repository
  • Social Coding on Open Source
  • Watchers
  • News Feed
  • Forks
  • Creating Pull Requests
  • Managing Pull Requests
  • Notifications
  • Finding Users, Projects, and Code
  • Wikis
  • GitHub Pages (Git for Websites)
  • In-Page Code Editor
  • Subversion Bridge
  • Tags Automatically Becoming Archives
  • Organizations
  • Social Coding on Closed Source
  • Eventual Open Sourcing
  • Coding Models
  • GitHub Enterprise
  • GitHub in Sum
What You Can Expect

At the end of this course, students will be able to:

  • Understand how to use source code control
  • Install Git and Github
  • Use the Git command line
  • Commit source code
  • Use Branches, Diffs, and Merges
  • Work with Repositories
  • Combine projects
  • Work with submodules
  • Create and manage Github repositories
Who Should Take This Course

This course is designed for Programmers.

Training Style

Instructor led with 50% lecture and 50% lab.

« Hide The Details

Every student attending a Verhoef Training class will receive a certificate good for $100 toward their next public class taken within a year.

You can also buy "Verhoef Vouchers" to get a discounted rate for a single student in any of our public or web-based classes. Contact your account manager or our sales office for details.

Schedule For This Course
There are currently no public sessions scheduled for this course. We can schedule a private class for your organization just a couple of weeks from now. Or we can let you know the next time we do schedule a public session.
Notify me the next time this course is confirmed!
Can't find the course you want?
Call us at 800.533.3893, or
email us at [email protected]