530 likes | 927 Views
Essential Git For Developers. Cork ALT.NET December 2013. What is Git?. D istributed version control system Open source ,written in C Linus Torvalds 2005 to maintain the linux k ernel. Why Git?. F ocuses on content not files Opt in when it comes to commits
E N D
Essential Git For Developers Cork ALT.NET December 2013
What is Git? • Distributed version control system • Open source ,written in C • Linus Torvalds 2005 to maintain the linuxkernel
Why Git? • Focuses on content not files • Opt in when it comes to commits • Open, not closed– open source model of working is baked into the software • Distributed - works almost entirely offline • It changes how you work – commit more often, making code reviews easier • Browsing history is lightening fast • Non-linear development
Commands • $git init • $git add <fileName> • $git commit –m <commit message> • $git status • $git log • $git command --help
Staging Working Directory git add Staging Area git commit Repository
File Status stackoverflow.com/questions/15653066/how-to-track-but-not-stage-and-how-to-unstage-but-not-untrack
Git stores snapshots, not differences git-scm.com/book/en/Getting-Started-Git-Basics
Commands • $git remote add <name> <url> • $git push <remote name> <local branch name> • $git clone <path to repo>
Git on the Server • Protocols –SSH , HTTP • HTTP - slower but allows anonymous access to the files • SSH - faster but everyone needs a unique SSH key • Hosting Options • Self Hosted (GitLab CE) • GitHub, BitBucket & many more …
$git pull command • $git fetch + $git merge = $git pull
.gitignore file Tells git to ignore specific files / folders https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
Branching • $git branch < new branchname> • $git checkout <branchname> • $git merge <branchname> • Think of a branch as simply a movable pointer to one of the commits in your repository
Fast forward merge Before merging After merge
3 way merge Before merging After merge
Git-Flow • Vincent Driessen's branching model • Defines a branching model designed around the project release, suitable for managing larger projects / large teams
Rebasing • “Take my commits and replay them after the HEAD of another branch.” • take all the changes that were committed on one branch and replay them on another one. • Moves a branch to a new base commit • Completely rewrites history! • Don’t do this on a shared branch
MERGE RESULT REBASE RESULT
Debugging git blame $git blame [-L ine1,line2]] <file> • Lets you see when each line of a method was edited and by whom
Debugging git bisect $ git bisect start $ git bisect bad HEAD $ git bisect good 1b6d
Cherry Picking If you want to get one single commit out of a branch $git cherry-pick <sha-1_commit>
Git on Windows • GUI Clients • SourceTree (free) • GitHub for Windows • Git GUI for Windows • TortoiseGit • Shells • Bash • Posh-git • Powershell • Cmd
Advice for getting started • Learning curve • Start with the command line, not the GUI • Agree a good branch strategy with your team up front • (Almost) every should be short lived, and kept up to date with master • Commit often, perfect later & user meaningful commit messages