Essential Git For Developers

advertisement
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 linux kernel
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
Centralized vs. Distributed
Centralised
Distributed
History only on the server
Complete history of the repo locally
Commit changes online only
Nearly every operation is local (offline) you can
commit locally & branch locally
Down tools if server is down
No hassle if server is down, redundant by default
Branching is difficult
Branching is really easy & lightweight
Branching is no longer a dirty word
Everyone commits to main repo ,typically you check More flexible workflows, you commit changes more
in when your work is complete
regularly
Demo – create a repo and add some files
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
Demo – working with remotes
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 …
Demo – web hook integration
$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
• Think of a branch as simply a movable pointer to one of the commits in your
repository
• $git branch < new branchname >
• $git checkout <branchname>
• $git merge <branchname>
Fast forward merge
Before merging
After merge
3 way merge
Before merging
After merge
Demo – branching and merging
Git-Flow
•Vincent Driessen's branching model
•Defines a branching model designed around the project release, suitable for managing larger
projects / large teams
TIME
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
Forking & Pull Requests
Demo – exploring the repo history
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
Shells
SourceTree (free)
Bash
GitHub for Windows
Posh-git
Git GUI for Windows
Powershell
TortoiseGit
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
Thanks for listening!
twitter : @AIDANJCASEY
Download