Upload
aidan-casey
View
625
Download
1
Embed Size (px)
DESCRIPTION
Slides from my talk at ALT.NET Cork. Unlike centralized version control systems, the distributed nature of Git allows you to be far more flexible in how developers collaborate on projects.In this session I'll take you through a quick tour of the essential git commands with some demos.We'll cover branching and merging strategies, pull requests ,working on open source (GitHub etc), git clients and git deployments to the cloud.
Citation preview
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. DistributedCentralised DistributedHistory 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 & lightweightBranching is no longer a dirty word
Everyone commits to main repo ,typically you check in when your work is complete
More flexible workflows, you commit changes more 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
StagingWorking Directory
Staging Area
Repository
git add
git commit
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 fileTells 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 mergeBefore merging After merge
3 way mergeBefore 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
$git cherry-pick <sha-1_commit>
If you want to get one single commit out of a branch
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
Thanks for listening!
twitter : @AIDANJCASEY