/outlines/Git Foundations Workshop Complete Outline.orgmode
http://github.com/matthewmccullough/git-workshop · text · 153 lines · 129 code · 24 blank · 0 comment · 0 complexity · e23977bcba445f930a1cb25d9deccd8f MD5 · raw file
- Git Foundations
- Distributed version control is all the rage these days, but is it worth it? It has been transformative for the dozens of organizations and thousands of developers that I’ve mentored on the unique implementation called Git. But don’t take my word for it. Discover the joy of a version control system that works for you, not against you, in a hands-on workshop. Bring a Windows, Mac, or Linux laptop and we’ll install, set up, use and bend Git into workflows that weren’t even possible with the version control systems of yesteryear. Be prepared to rethink how lightweight, fast, and refreshing source code control can be. After completing this workshop you’ll be able to do practical work with Git for your day job or weekend OSS hobby.
- * Repos
- ** Workshop Materials
- *** https://github.com/matthewmccullough/git-workshop
- ** Sample Project
- *** https://github.com/matthewmccullough/hellogitworld
- ** Shell Scripts
- *** https://github.com/matthewmccullough/scripts
- ** Shell Decorations
- *** https://github.com/matthewmccullough/MatthewsShellConfig
- ** Cheat Sheet
- *** http://refcardz.dzone.com/refcardz/getting-started-git
- * What is Git?
- ** Why a distributed version control system?
- ** How does Git differ from previous VCS systems?
- * Installing Git
- ** The 5 minute litmus test
- ** No systemic intrusions
- ** Ask for a USB Stick if you need binaries
- * Creating local repositories.
- ** git init
- *** On exisiting code or folders
- *** Legacy repo creation syntax
- ** git init <REPONAME>
- *** For a brand new project
- *** Recent convenience syntax (1.7 era)
- * Configuring Git
- ** Git Config
- *** Local
- *** Global
- *** System
- ** Your Name
- *** git config --global user.name "Matthew McCullough"
- ** Your Editor
- *** git config --global user.email "matthewm@ambientideas.com"
- ** Color
- *** git config --global color.ui "auto"
- * The Basic Commands
- ** Add
- *** git add <FILENAME>
- *** git add <PATTERN>
- *** Interactive checkin
- **** git add -p
- ** Commit
- *** Making code a permanent part of history
- *** Writing a commit to the .git/objects directory
- ** Reset
- *** Affects the index, HEAD an working directory
- *** git reset --hard
- *** git reset --soft
- *** git reset --mixed
- * Three stage thinking
- ** Why Git has three trees
- ** Why Git has a staging area
- ** Why Git cares about content
- * Git under the hood
- ** Hashes
- ** DAGs
- ** Treeish
- * A code-and-commit workflow
- ** Write code, change files
- ** Add only what's ready for consumption
- ** Commit only that portion
- * Cloning
- ** Hello Git World repo via three addresses
- *** https://matthewmccullough@github.com/matthewmccullough/hellogitworld.git
- *** git://github.com/matthewmccullough/hellogitworld.git
- *** git@github.com:matthewmccullough/hellogitworld.git
- ** Each protocol type has minor differences
- ** Resulting repo is the same
- * Remotes
- ** Multiples
- ** Just bookmarks
- * Branching in Git
- ** Cheap branches
- ** Managing branches
- ** Merging code
- ** Rebasing: A better merge
- * Navigating the tree: diff, ls-tree and show
- ** Git exposes its internals
- ** Can discover the data structures
- * Seeing Git as a content tracker (not just file tracker).
- * Understanding Git network operations, including cloning, remotes, pushing & pulling.
- ** Deleting branches
- * Branching for experiments, stories, and features.
- ** Creating branches for later
- *** git branch <BRANCHNAME>
- ** Creating for now
- *** git checkout -b <BRANCHNAME>
- * Merging branches, tags, and arbitrary hashes with recursive and fast-forward outcomes.
- ** git merge <branch>
- ** Which branches are merged?
- ** git branch --merged
- ** git branch --no-merged
- * Rebasing for code change clarity, unification, and history linearity.
- ** Traditional rebase
- *** git rebase <COMMIT>
- ** Interactive rebase
- *** git rebase -i <COMMIT>
- * History Modification
- ** Reset
- ** Amend
- ** Rebase
- ** Reflog
- * Workflows
- ** Offline sharing
- ** Pushing and pulling
- ** Commander, lieutenant and soldier
- ** Centralized
- * Tools
- ** GUIs and IDEs
- ** Web tools
- ** Git hosting
- * Precision Actions
- ** Merging a single file
- *** git checkout
- ** Displaying a file at a certain point in time
- *** git show TREEISH:filename
- * Broad Actions
- ** Logging ranges
- *** git log SINCE..TO
- ** Diffing arbitrary hashes
- *** git diff ANYFROM ANYTO
- * Hashing examples in the real world
- ** Names (3 letters + 1) on United screens
- ** First letter plus last on bulletins
- ** Trying to make a unique thing out of a non unique or large thing (full name)
- ** Trying to obscure the data but still offer a unique fingerprint