Slide 1

Slide 1 text

GIT MONTERAIL STYLE © Tymon Tobolski, 2015

Slide 2

Slide 2 text

Note about the language ... © Tymon Tobolski, 2015

Slide 3

Slide 3 text

BASICS © Tymon Tobolski, 2015

Slide 4

Slide 4 text

COMMIT FLOW © Tymon Tobolski, 2015

Slide 5

Slide 5 text

BRANCHING © Tymon Tobolski, 2015

Slide 6

Slide 6 text

PROTIP: NEW BRANCH $ git branch feature $ git checkout feature is the same as $ git checkout -b feature © Tymon Tobolski, 2015

Slide 7

Slide 7 text

MERGING © Tymon Tobolski, 2015

Slide 8

Slide 8 text

PUSH & PULL © Tymon Tobolski, 2015

Slide 9

Slide 9 text

CONFIGURATION $ git config --global user.name "Tymon Tobolski" $ git config --global user.email "[email protected]" © Tymon Tobolski, 2015

Slide 10

Slide 10 text

~/.gitconfig [user] name = Tymon Tobolski email = [email protected] [rerere] enabled = true [github] user = teamon [alias] st = status ci = commit co = checkout br = branch ph = push pl = pull [core] excludesfile = /Users/teamon/.gitignore_global [push] default = simple © Tymon Tobolski, 2015

Slide 11

Slide 11 text

PROTIP: ALIASES # .gitconfig [alias] st = status ci = commit co = checkout br = branch ph = push pl = pull # later in shell $ git co feature/JIRA-123 © Tymon Tobolski, 2015

Slide 12

Slide 12 text

.gitignore (RAILS APP) # Ignore bundler config. /.bundle # Ignore the default SQLite database. /db/*.sqlite3 /db/*.sqlite3-journal # Ignore all logfiles and tempfiles. /log/*.log /tmp # Ignore personal setup /config/database.yml © Tymon Tobolski, 2015

Slide 13

Slide 13 text

~/.gitignore_global (SYSTEM WIDE) # Logs and databases *.log *.sql # OS generated files .DS_Store .DS_Store? ._* .Spotlight-V100 .Trashes Icon? # Ruby stuff .ruby-version .rbenv-version .rbenv-vars # and more ... © Tymon Tobolski, 2015

Slide 14

Slide 14 text

~/.gitignore_global SETUP $ git config --global core.excludesfile ~/.gitignore_global REFERENCES ▸ http://islegend.com/development/setting-global-gitignore-mac-windows/ ▸ https://help.github.com/articles/ignoring-files/#create-a-global- gitignore © Tymon Tobolski, 2015

Slide 15

Slide 15 text

PROTIP: PROMPT google "git bash prompt" © Tymon Tobolski, 2015

Slide 16

Slide 16 text

COMMIT MESSAGE [JIRA-123] Capitalized, short (50 chars or less) summary More detailed explanatory text, if necessary. It can span multiple lines. [skip ci] github.com/monterail/guidelines/blob/master/git.md © Tymon Tobolski, 2015

Slide 17

Slide 17 text

Write present-tense, imperative-style commit messages GOOD: [JIRA-123] Add currency service BAD: [JIRA-123] Adds currency service BAD: [JIRA-123] Added currency service © Tymon Tobolski, 2015

Slide 18

Slide 18 text

If commit is for some reason not assigned to any ticket, we use following tags: [fix] Changes fixing code not assigned to issue [docs] Changes of documentation, not affecting code [style] Changes that do not affect the meaning of the code [refactor] Changes that affect code, but not behavior of app [perf] Changes that improve performance [test] Adding missing tests [chore] Other, usually boring or repeating tasks © Tymon Tobolski, 2015

Slide 19

Slide 19 text

REBASE © Tymon Tobolski, 2015

Slide 20

Slide 20 text

"MERGE HELL" © Tymon Tobolski, 2015

Slide 21

Slide 21 text

CASE 1 TWO DEVELOPERS WORKING ON THE SAME FEATURE © Tymon Tobolski, 2015

Slide 22

Slide 22 text

merge rebase © Tymon Tobolski, 2015

Slide 23

Slide 23 text

CASE 2 MERGING MULTIPLE FEATURES © Tymon Tobolski, 2015

Slide 24

Slide 24 text

merge rebase © Tymon Tobolski, 2015

Slide 25

Slide 25 text

REBASE © Tymon Tobolski, 2015

Slide 26

Slide 26 text

REBASE Getting up to date with master $ git checkout feat/abc $ git rebase master Merging feature into master $ git checkout master $ git merge --no-ff feat/abc © Tymon Tobolski, 2015

Slide 27

Slide 27 text

PROTIP: GIT UP $ gem install git-up $ git up master up to date feature/ABC-123 rebasing... feature/ABC-456 fast-forwarding... preprod up to date github.com/aanand/git-up © Tymon Tobolski, 2015

Slide 28

Slide 28 text

QUESTIONS? © Tymon Tobolski, 2015