Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Get IT right
Git Essentials
Bartosz Majsak (@majson), Thomas Hug (@gizmoo360)

http://ctp.com
http://github.com/ctpconsult...
About Us


Bartosz Majsak
 Java

Developer by day
 Open source junkie by night (Arquillian core team member)
 Conferen...
Why do we recommend Linux?

3

© 2013 Cambridge Technology Partners

10/25/2013
Git a British slang term meaning a contemptible
person, a bastard.

4

© 2013 Cambridge Technology Partners

10/25/2013
Git History



VCS of Linux Kernel



5

Founded 2005 as a replacement of BitKeeper

…not just Linux anymore

© 2013 Ca...
Git Concepts



Performance and Efficiency



6

No Central Server – Distributed VCS

Robustness

© 2013 Cambridge Tech...
Disclaimer

when we say repository we actually
mean local repository (no network connectivity)

7

© 2013 Cambridge Techno...
Installing and Configuring Git

© 2013 Cambridge Technology Partners
Installation





msysgit
cygwin
Atlassian SourceTree



XCode
Homebrew
MacPorts



Package Manager




9

© 2013 C...
Command line essentials

Playground
Objectives: getting familiar with essential commands and making your life easier



...
User Identity



Your contact details

$ git config --global user.name “Bruce Wayne”
$ git config --global user.email “ba...
Presets


Color output

$ git config --global color.ui auto


Aliases. Useful for stuff impossible to remember…

$ git c...
Reference Material


Git References
 http://git-scm.com/

- official Git Home
 http://git-scm.com/book - Pro Git (Apres...
First Repository

© 2013 Cambridge Technology Partners
Creating a Repository
$
$
$
$

mkdir myrepo
cd myrepo
git init
git ls -la

git init

Do this in one swoop with
$ git init ...
Adding Files
$
$
$
$

touch index.html
git status
git add index.html
git status

git status
git add

git add works also wi...
Committing Files
$ git commit
git commit
$ git status
$ git log --oneline --decorate

Commit directly with commit message:...
Three Stage Thinking

add
commit
checkout

Working
Directory
18

Staging
Area
© 2013 Cambridge Technology Partners

Reposi...
Deleting and ignoring Files
$
$
$
$
$
$
$

touch test1.log test2.log
git add test1.log
git commit
vim .gitignore
git statu...
How does my repo look like?
git log gives you and overview of your repository
structure.
$ git log
$ git log -p
$ git log ...
The Git File Workflow

ignore

add
edit

add
commit

rm
ignored

21

untracked

unmodified

© 2013 Cambridge Technology Pa...
Branching and Merging

© 2013 Cambridge Technology Partners
Branching
$ git branch mybranch
$ git branch
$ git checkout mybranch
Delete the branch with
$ git branch -d mybranch
$ git...
Time for some serious work
Objectives: Getting familiar with branching and tagging.





Create new branch and modify ...
I’m not done yet
$
$
$
…
$
$
$

git status
git stash
git status

# staged stuff

git stash list
git stash apply [--index]
...
Merging
checkout master
branch mybranch
showlog
branch

Feature

Fast-forward is default
$ git merge --no-ff

git merge

F...
Diffs
$ git diff mybranch master

git diff

Diff works also on the branch history
$ git diff
# unstaged
$ git diff HEAD^^ ...
Rebasing
$ git checkout master
$ git rebase mybranch

Rewriting history: Interactive rebase last four commits
$ git rebase...
All your base are belong to us
Objectives: Learn how rebase works.


Make changes on selected branch and rebase it with
m...
Going Remote

© 2013 Cambridge Technology Partners
Cloning Repositories
$ git clone [#remote]

Clone into a specific or existing (empty) folder
$ git clone [#remote] myclone...
Git Protocols


ssh / git: Securely connect to remote machines
git clone git@github.com:ctpconsulting/jazoon-git-workshop...
Remotes
$
$
$
$
$

git init myremoterepo
git remote
cd myremoterepo
… # commit something
git remote add origin [#remote]
g...
Submitting Changes
$ git push -u origin master
$ …
$ git push
Forced push
$ git push --force

By default, Git always tries...
Retrieving Changes
$ git fetch
$ git merge origin/master

git fetch
git pull

Or short-hand
$ git pull

Resolution strateg...
Retrieving Changes
$ git pull --rebase
During a regular daily workflow where several team
members sync a single branch oft...
37

© 2013 Cambridge Technology Partners
38

© 2013 Cambridge Technology Partners
Get IT right
Thank you!

39

© 2013 Cambridge Technology Partners
Credits


40

Icons provided by Icons8: http://icons8.com/

© 2013 Cambridge Technology Partners

10/25/2013
Upcoming SlideShare
Loading in …5
×

JAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -Essentials

2,906 views

Published on

http://guide13.jazoon.com/#/submissions/156

  • Be the first to comment

JAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -Essentials

  1. 1. Get IT right Git Essentials Bartosz Majsak (@majson), Thomas Hug (@gizmoo360) http://ctp.com http://github.com/ctpconsulting 1 © 2013 Cambridge Technology Partners Copyright © 2013 Cambridge Technology Partners All Rights Reserved. Cambridge, its logo, and Get IT Right are trademarks of Cambridge Technology Partners.
  2. 2. About Us  Bartosz Majsak  Java Developer by day  Open source junkie by night (Arquillian core team member)  Conference speaker by passion (Devoxx, Jazoon ...)  Thomas Hug  With Cambridge Technology Partners since 2002  Java Developer, TTL, Solution Architect  Apache Committer, OSS contributor and aficionado 2 © 2013 Cambridge Technology Partners 10/25/2013
  3. 3. Why do we recommend Linux? 3 © 2013 Cambridge Technology Partners 10/25/2013
  4. 4. Git a British slang term meaning a contemptible person, a bastard. 4 © 2013 Cambridge Technology Partners 10/25/2013
  5. 5. Git History   VCS of Linux Kernel  5 Founded 2005 as a replacement of BitKeeper …not just Linux anymore © 2013 Cambridge Technology Partners 10/25/2013
  6. 6. Git Concepts   Performance and Efficiency  6 No Central Server – Distributed VCS Robustness © 2013 Cambridge Technology Partners 10/25/2013
  7. 7. Disclaimer when we say repository we actually mean local repository (no network connectivity) 7 © 2013 Cambridge Technology Partners 10/25/2013
  8. 8. Installing and Configuring Git © 2013 Cambridge Technology Partners
  9. 9. Installation    msysgit cygwin Atlassian SourceTree  XCode Homebrew MacPorts  Package Manager   9 © 2013 Cambridge Technology Partners 10/25/2013
  10. 10. Command line essentials Playground Objectives: getting familiar with essential commands and making your life easier         10 touch cat / less mkdir ls tree cp / rm / mv nano history / ctrl+shift+r © 2013 Cambridge Technology Partners 10/25/2013
  11. 11. User Identity  Your contact details $ git config --global user.name “Bruce Wayne” $ git config --global user.email “batman@gotham.com” $ less ~/.gitconfig  SSH Key generation $ ssh-keygen -t *dsa -C batman@gotham.com *Using SHA-2 underneath. Approved by NSA 11 © 2013 Cambridge Technology Partners 10/25/2013
  12. 12. Presets  Color output $ git config --global color.ui auto  Aliases. Useful for stuff impossible to remember… $ git config --global alias.showlog "log --color -graph --pretty=format:'%Cred%h%Creset %C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" Three levels of configuration: --local (default, per repo) --global (per user) --system (machine) 10/25/2013 12 © 2013 Cambridge Technology Partners
  13. 13. Reference Material  Git References  http://git-scm.com/ - official Git Home  http://git-scm.com/book - Pro Git (Apress) online version  http://git-scm.com/docs - Reference Documentation  https://www.atlassian.com/git/tutorial - Git Tutorial  http://gitready.com/ - Git Tutorial  Workflows  https://www.atlassian.com/git/workflows - Tutorial on common Git workflows  http://yakiloo.com/getting-started-git-flow/ - About Git Flow (advanced topic)  Getting Help  http://stackoverflow.com/ - All things programming  https://help.github.com/ - Git Recipies 13 © 2013 Cambridge Technology Partners 10/25/2013
  14. 14. First Repository © 2013 Cambridge Technology Partners
  15. 15. Creating a Repository $ $ $ $ mkdir myrepo cd myrepo git init git ls -la git init Do this in one swoop with $ git init myrepo 15 © 2013 Cambridge Technology Partners 10/25/2013
  16. 16. Adding Files $ $ $ $ touch index.html git status git add index.html git status git status git add git add works also with patterns: $ git add ‘*.java’ $ git add . $ git add folder/ You can even stage parts of a file $ git add –p|-i Stage all changes (including deleted files) in the working directory with $ git add -A . 16 © 2013 Cambridge Technology Partners 10/25/2013
  17. 17. Committing Files $ git commit git commit $ git status $ git log --oneline --decorate Commit directly with commit message: $ git commit -m ‘Been there, done that’ $ git commit -am ‘Add also modified files directly’ Need a different commit editor? export EDITOR=vim 17 © 2013 Cambridge Technology Partners
  18. 18. Three Stage Thinking add commit checkout Working Directory 18 Staging Area © 2013 Cambridge Technology Partners Repository History 10/25/2013
  19. 19. Deleting and ignoring Files $ $ $ $ $ $ $ touch test1.log test2.log git add test1.log git commit vim .gitignore git status git rm test1.log git commit A shell script for easily accessing - gitignore boilerplates https://github.com/simonwhitaker/gitignore-boilerplates $ gibo Java Eclipse >> .gitignore 19 © 2013 Cambridge Technology Partners .gitignore git rm
  20. 20. How does my repo look like? git log gives you and overview of your repository structure. $ git log $ git log -p $ git log --oneline --decorate $ git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit 20 © 2013 Cambridge Technology Partners 10/25/2013
  21. 21. The Git File Workflow ignore add edit add commit rm ignored 21 untracked unmodified © 2013 Cambridge Technology Partners modified staged 10/25/2013
  22. 22. Branching and Merging © 2013 Cambridge Technology Partners
  23. 23. Branching $ git branch mybranch $ git branch $ git checkout mybranch Delete the branch with $ git branch -d mybranch $ git branch -D mybranch Create a branch and check it out in one swoop $ git checkout -b mybranch 23 © 2013 Cambridge Technology Partners git branch # if unmerged
  24. 24. Time for some serious work Objectives: Getting familiar with branching and tagging.     Create new branch and modify repository Switch between branches Delete branch Tag commits $ git branch $ git checkout $ git tag 24 © 2013 Cambridge Technology Partners 10/25/2013
  25. 25. I’m not done yet $ $ $ … $ $ $ git status git stash git status # staged stuff git stash list git stash apply [--index] git stash drop stash@{0} Apply and remove stash in one swoop $ git stash pop 25 © 2013 Cambridge Technology Partners git stash
  26. 26. Merging checkout master branch mybranch showlog branch Feature Fast-forward is default $ git merge --no-ff git merge Feature git git git git Feature $ $ $ $ Deactivating fast-forward merges per branch $ git config branch.master.mergeoptions 26 © 2013 Cambridge Technology Partners "--no-ff"
  27. 27. Diffs $ git diff mybranch master git diff Diff works also on the branch history $ git diff # unstaged $ git diff HEAD^^ HEAD # from to $ git diff hash1...hash2 # from to 27 © 2013 Cambridge Technology Partners
  28. 28. Rebasing $ git checkout master $ git rebase mybranch Rewriting history: Interactive rebase last four commits $ git rebase --i HEAD~4 28 © 2013 Cambridge Technology Partners git rebase
  29. 29. All your base are belong to us Objectives: Learn how rebase works.  Make changes on selected branch and rebase it with master $ git rebase <BRANCH> 29 © 2013 Cambridge Technology Partners 10/25/2013
  30. 30. Going Remote © 2013 Cambridge Technology Partners
  31. 31. Cloning Repositories $ git clone [#remote] Clone into a specific or existing (empty) folder $ git clone [#remote] myclonedrepo 31 © 2013 Cambridge Technology Partners git clone
  32. 32. Git Protocols  ssh / git: Securely connect to remote machines git clone git@github.com:ctpconsulting/jazoon-git-workshops.git  HTTPS: Firewall friendly git clone https://github.com/ctpconsulting/jazoon-git-workshops.git  File – simple. Can be used with e.g. a shared drive git clone file:///home/thug/repo/chopen-workshop-git Cloning directly without the file protocol will use hard links $ git clone /home/thug/repo/jazoon-git-workshops 32 © 2013 Cambridge Technology Partners 10/25/2013
  33. 33. Remotes $ $ $ $ $ git init myremoterepo git remote cd myremoterepo … # commit something git remote add origin [#remote] git remote -v Git is distributed – you can have more than one remote! $ git remote add https-origin https://myrepo.com/repo.git 33 © 2013 Cambridge Technology Partners
  34. 34. Submitting Changes $ git push -u origin master $ … $ git push Forced push $ git push --force By default, Git always tries to push all matching branches. Configuration to push only current to upstream: $ git config push.default upstream 34 © 2013 Cambridge Technology Partners git push
  35. 35. Retrieving Changes $ git fetch $ git merge origin/master git fetch git pull Or short-hand $ git pull Resolution strategy for merge conflicts $ git pull -Xours $ git pull -Xtheirs 35 © 2013 Cambridge Technology Partners
  36. 36. Retrieving Changes $ git pull --rebase During a regular daily workflow where several team members sync a single branch often, the timeline gets polluted with unnecessary micro-merges on a regular git pull. Rebasing ensures that the commits are always re-applied so that the history stays linear. Make git pull on master always use rebase $ git config branch.master.rebase true Or make it a default for every tracking branch strategy $ git config --global branch.autosetuprebase always 36 © 2013 Cambridge Technology Partners
  37. 37. 37 © 2013 Cambridge Technology Partners
  38. 38. 38 © 2013 Cambridge Technology Partners
  39. 39. Get IT right Thank you! 39 © 2013 Cambridge Technology Partners
  40. 40. Credits  40 Icons provided by Icons8: http://icons8.com/ © 2013 Cambridge Technology Partners 10/25/2013

×