Git Crash Course

Post on 28-Jan-2015

129 views 1 download

Tags:

description

"Git Crash Course/Brown Bags" the basics of creating Git repositories, do versioning of files, branching and merging.

Transcript of Git Crash Course

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Brown bag - Crash courseFrom «I cloned», to «I push»

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Agenda

● Presentation (20’)o Basic commandso Branching and mergingo Git repositories and sharing code

● Q&A (5’)● Quiz (5’)

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Git setup

$ git config --global user.name "FOO BAR"$ git config --global user.email foobar@acme.com

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

The very beginning

$ mkdir ccbb-git$ cd ccbb-git

$ lltotal 0drwxr-xr-x 2 simo6545 1604020879 68 Feb 1 09:01 ./drwxr-xr-x 117 simo6545 1604020879 3978 Feb 1 09:01 ../

local directory

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Working directory

$ gitusage: git [--version] [--help] [-c name=value]

[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]

[-p|--paginate|--no-pager] [--no-replace-objects] [--bare]

[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]

<command> [<args>]

The most commonly used git commands are:

add Add file contents to the index

bisect Find by binary search the change that introduced a bug

branch List, create, or delete branches

...

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Working directory - poking around

$ echo 'The very beginning' > README

$ git statusfatal: Not a git repository (or any of the parent directories): .git

$ ls -latotal 8drwxr-xr-x 3 simo6545 1604020879 102 Feb 1 09:28 .drwxr-xr-x 117 simo6545 1604020879 3978 Feb 1 09:01 ..-rw-r--r-- 1 simo6545 1604020879 19 Feb 1 09:28 README

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Working directory - create repository

$ git initInitialized empty Git repository in /Users/simo6545/tmp/20140201-090152/.git/

$ lltotal 8drwxr-xr-x 4 simo6545 1604020879 136 Feb 1 09:38 ./drwxr-xr-x 117 simo6545 1604020879 3978 Feb 1 09:01 ../drwxr-xr-x 9 simo6545 1604020879 306 Feb 1 09:39 .git/-rw-r--r-- 1 simo6545 1604020879 19 Feb 1 09:28 README

working directory

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Working directory status$ git status# On branch master## Initial commit## Untracked files:# (use "git add <file>..." to include in what will be committed)## READMEnothing added to commit but untracked files present (use "git add" to track)

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Staging area$ git status -s?? README

$ git add README

$ git status -sA README

stage changes

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Staging area$ echo 'This is the second line.' >> README

$ git status -sAM README

$ git diffdiff --git a/README b/READMEindex 939d82f..9e92fed 100644--- a/README+++ b/README@@ -1 +1,2 @@ The very beginning+This is the second line.

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Staging area

$ git add README

$ git status -sA README

Stage changes again:

$ git diff

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Commit to Git repository$ git commit -m 'First commit'[master (root-commit) 7c23e33] First commit 1 file changed, 2 insertions(+) create mode 100644 README

$ git logcommit 7c23e33b09b4863dbf59dbaec7bb023f7ff15c70Author: Simone Soldateschi <simone.soldateschi@gmail.com>Date: Sat Feb 1 10:10:48 2014 +0000

First commit

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Recap - The three states

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Basic commands

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Tagging$ git tag v0.1

$ git lg* 7c23e33 - (HEAD, tag: v0.1, master) First commit (63 minutes ago)

$ echo 'Still working...' >> README

$ git status -s M README

$ git add README$ git status -sM README

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Tagging$ git commit -m 'Second commit'[master a0a8c4b] Second commit 1 file changed, 1 insertion(+)

$ git status -s

$ git lg* a0a8c4b - (HEAD, master) Second commit (6 seconds ago)* 7c23e33 - (tag: v0.1) First commit (67 minutes ago)

$ git tag v0.2

$ git lg* a0a8c4b - (HEAD, tag: v0.2, master) Second commit (6 seconds ago)* 7c23e33 - (tag: v0.1) First commit (67 minutes ago)

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

File status lifecycle

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Agenda

● Presentation (20’)o Basic commandso Branching and mergingo Git repositories and sharing code

● Q&A (5’)● Quiz (5’)

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Branching

$ git initInitialized empty Git repository in /Users/simo6545/tmp/20140201-090152/.git/$ echo 'The first line' > README$ git add README$ git commit -m 'C0'[master (root-commit) 38e3df8] C0 1 file changed, 1 insertion(+) create mode 100644 README$ echo 'The second line' >> README$ git add README$ git commit -m 'C1'[master 836e142] C1 1 file changed, 1 insertion(+)

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Branching

$ git checkout -b experiment

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Branching

$ echo 'Experimental line' >> README$ git add README$ git commit -m "C2"[experiment 18c3f30] C2 1 file changed, 1 insertion(+)

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Branching

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Branching

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Branching

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Branching

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Branching

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Merging

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Merge conflict$ git merge experiment Auto-merging READMECONFLICT (content): Merge conflict in READMEAutomatic merge failed; fix conflicts and then commit the result.$ cat README The first lineThe second line<<<<<<< HEADThe third line=======Experimental lineAnother experimental lineThe last experimental line>>>>>>> experiment

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Merge conflict

$ cat README The first lineThe second lineThe third lineExperimental lineAnother experimental lineThe last experimental line$ git add README $ git commit -m ‘C6’

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

RollbackCurrent content of README:

Look at repository logs:

Rollback:

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Rollback

How does README look like?

What about repository logs?

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Checkout

List branches (?!)

Restore master

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Agenda

● Presentation (20’)o Basic commandso Branching and mergingo Git repositories and sharing code

● Q&A (5’)● Quiz (5’)

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Git repos & sharing code

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Git repos & sharing code

http://gitorious.org

http://gna.org/projects/savane/

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Git repos & sharing code

● remote● clone● pull● push

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Remote repository

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Remote repository

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Remote repository

$ git remote origin$ git remote -vorigin git@github.com:siso/ccbbgit.git (fetch)origin git@github.com:siso/ccbbgit.git (push)

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Remote repository

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

pull

do stuff

push

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Remote repository - README.md

$ cat > README.md << EOF # Git Crash Course - Brown Bag

## Paragraph 1* **Lorem ipsum dolor sit amet**, consectetur adipiscing elit. Donec tempor justo vitae nisi condimentum, id lobortis turpis tincidunt.

## Paragraph 2* Duis egestas arcu quis elit posuere, vel iaculis lacus lobortis. Duis ultricies sem in diam facilisis, eget blandit mi rutrum.EOF

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Markdown

Markdown cheatsheethttps://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Remote repository - push$ git add README.md$ git commit -m 'first release'[master e0b1158] first release 1 file changed, 6 insertions(+)

$ git push origin master Counting objects: 5, done.Delta compression using up to 4 threads.Compressing objects: 100% (2/2), done.Writing objects: 100% (3/3), 464 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0)To git@github.com:siso/ccbbgit.git 5df3dad..e0b1158 master -> master

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Remote repository

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

local actionsand objects

remote actionsand objects

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

A successful branching model

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Git aliases

$ git config --global alias.b branch

$ git config --global alias.lg log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative

$ git config --global alias.serve !git daemon --reuseaddr --verbose --base-path=. --export-all ./.git

$ git config --global alias.st status st

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Agenda

● Presentation (20’)o Basic commandso Branching and mergingo Git repositories and sharing code

● Q&A (5’)● Quiz (5’)

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Agenda

● Presentation (20’)o Basic commandso Branching and mergingo Git repositories and sharing code

● Q&A (5’)● Quiz (5’)

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Quiz

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Give your feedback!

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

References

Git SCMhttp://git-scm.com/

A Visual Git Referencehttp://marklodato.github.io/visual-git-guide/index-en.html

Git Workflowshttps://www.atlassian.com/git/workflows

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk

Homework

● Replay examples● commit result to GitHub● send me a message

RACKSPACE® HOSTING | WWW.RACKSPACE.COMsimone.soldateschi@rackspace.co.uk