SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
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.
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
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 Cambridge Technology Partners

10/25/2013
Git Concepts



Performance and Efficiency



6

No Central Server – Distributed VCS

Robustness

© 2013 Cambridge Technology Partners

10/25/2013
Disclaimer

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

7

© 2013 Cambridge Technology Partners

10/25/2013
Installing and Configuring Git

© 2013 Cambridge Technology Partners
Installation





msysgit
cygwin
Atlassian SourceTree



XCode
Homebrew
MacPorts



Package Manager




9

© 2013 Cambridge Technology Partners

10/25/2013
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
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
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
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
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 myrepo

15

© 2013 Cambridge Technology Partners

10/25/2013
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
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
Three Stage Thinking

add
commit
checkout

Working
Directory
18

Staging
Area
© 2013 Cambridge Technology Partners

Repository
History
10/25/2013
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
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
The Git File Workflow

ignore

add
edit

add
commit

rm
ignored

21

untracked

unmodified

© 2013 Cambridge Technology Partners

modified

staged

10/25/2013
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 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
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
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
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"
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
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
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
Going Remote

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

Clone into a specific or existing (empty) folder
$ git clone [#remote] myclonedrepo

31

© 2013 Cambridge Technology Partners

git clone
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
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
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
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
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

© 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

Weitere ähnliche Inhalte

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

ITCamp 2013 - Alessandro Pilotti - Git crash course for Visual Studio devs
ITCamp 2013 - Alessandro Pilotti - Git crash course for Visual Studio devsITCamp 2013 - Alessandro Pilotti - Git crash course for Visual Studio devs
ITCamp 2013 - Alessandro Pilotti - Git crash course for Visual Studio devs
ITCamp
 

Ähnlich wie JAZOON'13 - Thomas Hug & Bartosz Majsak - Git Workshop -Essentials (20)

Tech thursdays / GIT
Tech thursdays / GITTech thursdays / GIT
Tech thursdays / GIT
 
That's (g)it! par Sébastien Dawans CETIC
That's (g)it! par Sébastien Dawans CETICThat's (g)it! par Sébastien Dawans CETIC
That's (g)it! par Sébastien Dawans CETIC
 
Nyc Code Camp 2010 Git And Github
Nyc Code Camp 2010 Git And GithubNyc Code Camp 2010 Git And Github
Nyc Code Camp 2010 Git And Github
 
Geek git
Geek gitGeek git
Geek git
 
Kubernetes GitOps featuring GitHub, Kustomize and ArgoCD
Kubernetes GitOps featuring GitHub, Kustomize and ArgoCDKubernetes GitOps featuring GitHub, Kustomize and ArgoCD
Kubernetes GitOps featuring GitHub, Kustomize and ArgoCD
 
Git - An Introduction
Git - An IntroductionGit - An Introduction
Git - An Introduction
 
Git from the trenches
Git from the trenchesGit from the trenches
Git from the trenches
 
Golang 101 for IT-Pros - Cisco Live Orlando 2018 - DEVNET-1808
Golang 101 for IT-Pros - Cisco Live Orlando 2018 - DEVNET-1808Golang 101 for IT-Pros - Cisco Live Orlando 2018 - DEVNET-1808
Golang 101 for IT-Pros - Cisco Live Orlando 2018 - DEVNET-1808
 
Why Git Sucks and you'll use it anyways
Why Git Sucks and you'll use it anywaysWhy Git Sucks and you'll use it anyways
Why Git Sucks and you'll use it anyways
 
ITCamp 2013 - Alessandro Pilotti - Git crash course for Visual Studio devs
ITCamp 2013 - Alessandro Pilotti - Git crash course for Visual Studio devsITCamp 2013 - Alessandro Pilotti - Git crash course for Visual Studio devs
ITCamp 2013 - Alessandro Pilotti - Git crash course for Visual Studio devs
 
Git - Boost Your DEV Team Speed and Productivity
Git - Boost Your DEV Team Speed and ProductivityGit - Boost Your DEV Team Speed and Productivity
Git - Boost Your DEV Team Speed and Productivity
 
Development with Git and Gerrit - Eclipse DemoCamp Stuttgart - 2010-11-23
Development with Git and Gerrit - Eclipse DemoCamp Stuttgart - 2010-11-23Development with Git and Gerrit - Eclipse DemoCamp Stuttgart - 2010-11-23
Development with Git and Gerrit - Eclipse DemoCamp Stuttgart - 2010-11-23
 
Intro to Git Devnet-1080 Cisco Live 2018
Intro to Git Devnet-1080 Cisco Live 2018Intro to Git Devnet-1080 Cisco Live 2018
Intro to Git Devnet-1080 Cisco Live 2018
 
GIT from n00b
GIT from n00bGIT from n00b
GIT from n00b
 
Git single branch
Git single branchGit single branch
Git single branch
 
maksym vlasov - culture of git as roots of your ci
maksym vlasov - culture of git as roots of your cimaksym vlasov - culture of git as roots of your ci
maksym vlasov - culture of git as roots of your ci
 
Working in Team using Git in Unity
Working in Team using Git in UnityWorking in Team using Git in Unity
Working in Team using Git in Unity
 
Intro. to Git and Github
Intro. to Git and GithubIntro. to Git and Github
Intro. to Git and Github
 
Github By Nyros Developer
Github By Nyros DeveloperGithub By Nyros Developer
Github By Nyros Developer
 
Git ongithub
Git ongithubGit ongithub
Git ongithub
 

Mehr von jazoon13

JAZOON'13 - Ulrika Park- User Story telling The Lost Art of User Stories
JAZOON'13 - Ulrika Park- User Story telling The Lost Art of User StoriesJAZOON'13 - Ulrika Park- User Story telling The Lost Art of User Stories
JAZOON'13 - Ulrika Park- User Story telling The Lost Art of User Stories
jazoon13
 
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone before
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone beforeJAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone before
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone before
jazoon13
 
JAZOON'13 - Andres Almiray - Rocket Propelled Java
JAZOON'13 - Andres Almiray - Rocket Propelled JavaJAZOON'13 - Andres Almiray - Rocket Propelled Java
JAZOON'13 - Andres Almiray - Rocket Propelled Java
jazoon13
 
JAZOON'13 - Sven Peters - How to do Kick-Ass Software Development
JAZOON'13 - Sven Peters - How to do Kick-Ass Software DevelopmentJAZOON'13 - Sven Peters - How to do Kick-Ass Software Development
JAZOON'13 - Sven Peters - How to do Kick-Ass Software Development
jazoon13
 
JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application develo...
JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application develo...JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application develo...
JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application develo...
jazoon13
 
JAZOON'13 - Pawel Wrzeszcz - Visibility Shift In Distributed Teams
JAZOON'13 - Pawel Wrzeszcz - Visibility Shift In Distributed TeamsJAZOON'13 - Pawel Wrzeszcz - Visibility Shift In Distributed Teams
JAZOON'13 - Pawel Wrzeszcz - Visibility Shift In Distributed Teams
jazoon13
 
JAZOON'13 - Kai Waehner - Hadoop Integration
JAZOON'13 - Kai Waehner - Hadoop IntegrationJAZOON'13 - Kai Waehner - Hadoop Integration
JAZOON'13 - Kai Waehner - Hadoop Integration
jazoon13
 
JAZOON'13 - Sam Brannen - Spring Framework 4.0 - The Next Generation
JAZOON'13 - Sam Brannen - Spring Framework 4.0 - The Next GenerationJAZOON'13 - Sam Brannen - Spring Framework 4.0 - The Next Generation
JAZOON'13 - Sam Brannen - Spring Framework 4.0 - The Next Generation
jazoon13
 
JAZOON'13 - Anatole Tresch - Go for the money (JSR 354) !
JAZOON'13 - Anatole Tresch - Go for the money (JSR 354) !JAZOON'13 - Anatole Tresch - Go for the money (JSR 354) !
JAZOON'13 - Anatole Tresch - Go for the money (JSR 354) !
jazoon13
 
JAZOON'13 - Abdelmonaim Remani - The Economies of Scaling Software
JAZOON'13 - Abdelmonaim Remani - The Economies of Scaling SoftwareJAZOON'13 - Abdelmonaim Remani - The Economies of Scaling Software
JAZOON'13 - Abdelmonaim Remani - The Economies of Scaling Software
jazoon13
 
JAZOON'13 - Stefan Saasen - Real World Git Workflows
JAZOON'13 - Stefan Saasen - Real World Git WorkflowsJAZOON'13 - Stefan Saasen - Real World Git Workflows
JAZOON'13 - Stefan Saasen - Real World Git Workflows
jazoon13
 

Mehr von jazoon13 (17)

JAZOON'13 - Joe Justice - Test First Saves The World
JAZOON'13 - Joe Justice - Test First Saves The WorldJAZOON'13 - Joe Justice - Test First Saves The World
JAZOON'13 - Joe Justice - Test First Saves The World
 
JAZOON'13 - Ulrika Park- User Story telling The Lost Art of User Stories
JAZOON'13 - Ulrika Park- User Story telling The Lost Art of User StoriesJAZOON'13 - Ulrika Park- User Story telling The Lost Art of User Stories
JAZOON'13 - Ulrika Park- User Story telling The Lost Art of User Stories
 
JAZOON'13 - Oliver Zeigermann - Typed JavaScript with TypeScript
JAZOON'13 - Oliver Zeigermann - Typed JavaScript with TypeScriptJAZOON'13 - Oliver Zeigermann - Typed JavaScript with TypeScript
JAZOON'13 - Oliver Zeigermann - Typed JavaScript with TypeScript
 
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone before
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone beforeJAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone before
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone before
 
JAZOON'13 - Andres Almiray - Rocket Propelled Java
JAZOON'13 - Andres Almiray - Rocket Propelled JavaJAZOON'13 - Andres Almiray - Rocket Propelled Java
JAZOON'13 - Andres Almiray - Rocket Propelled Java
 
JAZOON'13 - Sven Peters - How to do Kick-Ass Software Development
JAZOON'13 - Sven Peters - How to do Kick-Ass Software DevelopmentJAZOON'13 - Sven Peters - How to do Kick-Ass Software Development
JAZOON'13 - Sven Peters - How to do Kick-Ass Software Development
 
JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application develo...
JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application develo...JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application develo...
JAZOON'13 - Nikita Salnikov-Tarnovski - Multiplatform Java application develo...
 
JAZOON'13 - Pawel Wrzeszcz - Visibility Shift In Distributed Teams
JAZOON'13 - Pawel Wrzeszcz - Visibility Shift In Distributed TeamsJAZOON'13 - Pawel Wrzeszcz - Visibility Shift In Distributed Teams
JAZOON'13 - Pawel Wrzeszcz - Visibility Shift In Distributed Teams
 
JAZOON'13 - Kai Waehner - Hadoop Integration
JAZOON'13 - Kai Waehner - Hadoop IntegrationJAZOON'13 - Kai Waehner - Hadoop Integration
JAZOON'13 - Kai Waehner - Hadoop Integration
 
JAZOON'13 - Sam Brannen - Spring Framework 4.0 - The Next Generation
JAZOON'13 - Sam Brannen - Spring Framework 4.0 - The Next GenerationJAZOON'13 - Sam Brannen - Spring Framework 4.0 - The Next Generation
JAZOON'13 - Sam Brannen - Spring Framework 4.0 - The Next Generation
 
JAZOON'13 - Guide Schmutz - Kafka and Strom Event Processing In Realtime
JAZOON'13 - Guide Schmutz - Kafka and Strom Event Processing In RealtimeJAZOON'13 - Guide Schmutz - Kafka and Strom Event Processing In Realtime
JAZOON'13 - Guide Schmutz - Kafka and Strom Event Processing In Realtime
 
JAZOON'13 - Andrej Vckovski - Go synchronized
JAZOON'13 - Andrej Vckovski - Go synchronizedJAZOON'13 - Andrej Vckovski - Go synchronized
JAZOON'13 - Andrej Vckovski - Go synchronized
 
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experienceJAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
 
JAZOON'13 - Anatole Tresch - Go for the money (JSR 354) !
JAZOON'13 - Anatole Tresch - Go for the money (JSR 354) !JAZOON'13 - Anatole Tresch - Go for the money (JSR 354) !
JAZOON'13 - Anatole Tresch - Go for the money (JSR 354) !
 
JAZOON'13 - Abdelmonaim Remani - The Economies of Scaling Software
JAZOON'13 - Abdelmonaim Remani - The Economies of Scaling SoftwareJAZOON'13 - Abdelmonaim Remani - The Economies of Scaling Software
JAZOON'13 - Abdelmonaim Remani - The Economies of Scaling Software
 
JAZOON'13 - Stefan Saasen - True Git: The Great Migration
JAZOON'13 - Stefan Saasen - True Git: The Great MigrationJAZOON'13 - Stefan Saasen - True Git: The Great Migration
JAZOON'13 - Stefan Saasen - True Git: The Great Migration
 
JAZOON'13 - Stefan Saasen - Real World Git Workflows
JAZOON'13 - Stefan Saasen - Real World Git WorkflowsJAZOON'13 - Stefan Saasen - Real World Git Workflows
JAZOON'13 - Stefan Saasen - Real World Git Workflows
 

Kürzlich hochgeladen

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Kürzlich hochgeladen (20)

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 

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

  • 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. 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. Why do we recommend Linux? 3 © 2013 Cambridge Technology Partners 10/25/2013
  • 4. Git a British slang term meaning a contemptible person, a bastard. 4 © 2013 Cambridge Technology Partners 10/25/2013
  • 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. Git Concepts   Performance and Efficiency  6 No Central Server – Distributed VCS Robustness © 2013 Cambridge Technology Partners 10/25/2013
  • 7. Disclaimer when we say repository we actually mean local repository (no network connectivity) 7 © 2013 Cambridge Technology Partners 10/25/2013
  • 8. Installing and Configuring Git © 2013 Cambridge Technology Partners
  • 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. 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. 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. 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. First Repository © 2013 Cambridge Technology Partners
  • 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. 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. 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. Three Stage Thinking add commit checkout Working Directory 18 Staging Area © 2013 Cambridge Technology Partners Repository History 10/25/2013
  • 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. 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. The Git File Workflow ignore add edit add commit rm ignored 21 untracked unmodified © 2013 Cambridge Technology Partners modified staged 10/25/2013
  • 22. Branching and Merging © 2013 Cambridge Technology Partners
  • 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. 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. 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. 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. 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. 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. 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. Going Remote © 2013 Cambridge Technology Partners
  • 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. 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. 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. 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. 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. 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 © 2013 Cambridge Technology Partners
  • 38. 38 © 2013 Cambridge Technology Partners
  • 39. Get IT right Thank you! 39 © 2013 Cambridge Technology Partners
  • 40. Credits  40 Icons provided by Icons8: http://icons8.com/ © 2013 Cambridge Technology Partners 10/25/2013