essential git for developers

Post on 03-Sep-2014

635 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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.

TRANSCRIPT

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

top related