SlideShare ist ein Scribd-Unternehmen logo
1 von 125
Downloaden Sie, um offline zu lesen
GITANTI
PATTERNS
How To Mess Up With Git and Love It Again
LEMi ORHAN ERGiN
Agile Software Craftsman, iyzico
/lemiorhan
lemiorhanergin.com
@lemiorhan
28 common git anti-patterns
DISCLOSURE
There is no formula for using git efficiently.
Opinions are my own. It means the opposites
might work perfectly for your conditions.
git is powerful
but you have to know using it properly
Are you using git
if all you do is commit-push-pull
use dropbox instead
ANTIPATTERN DANGER
as if it is dropbox ?
1DROPBOX-ISH GIT ANTI-PATTERN
learn how git works
no worries, I will cover how git behaves
the way it keeps
FILES & FOLDERS
working copy
staging area
objects database
repository
the way it keeps
REFERENCES
directed acyclic graph
keeping snapshots
traversing graph
branches, tags, heads
git has 2 mechanisms
Source Code
Working Copy
you want to version changes
Source Code
Working Copy
$ git init
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
initializing repo
Source Code
Working Copy
$ git init --bare
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
Remote
Upstream Repo / Remote Repo
Server
initializing bare repo
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
Remote
Upstream Repo / Remote Repo
Server
Source Code
Working Copy
$ git add .
preparing commits
folder
folder
folder
file
file
file
$ git add .
preparing commits
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
Remote
Upstream Repo / Remote Repo
Server
Source Code
Working Copy
$ git add .
preparing commits
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
Remote
Upstream Repo / Remote Repo
Server
Source Code
Working Copy
$ git commit -m “initial commit”
commi!ing
$ git commit -m “initial commit”
commi!ing
folder
folder
folder
file
file
file
commit
branch
HEAD
For more details, refer to book
Git Internals by Scott Chacon
folder
folder
folder
file
file
file
commit
$ git commit -m “second commit”
commi!ing
folder
commit
branch
HEAD
folder
file
folder
For more details, refer to book
Git Internals by Scott Chacon
folder
folder
folder
file
file
file
commit
$ git commit -m “third commit”
commi!ing
folder
commit
folder
file
folder
folder
commit
branch
HEAD
file
For more details, refer to book
Git Internals by Scott Chacon
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
Remote
Upstream Repo / Remote Repo
Server
Source Code
Working Copy
$ git commit -m “initial commit”
commi!ing
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
Remote
Upstream Repo / Remote Repo
Server
Source Code
Working Copy
$ git remote add origin http://upstream.repo
$ git push -u origin master pushing to remote
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
Remote
Upstream Repo / Remote Repo
Server
Source Code
Working Copy
new changes from others are pushed
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
Remote
Upstream Repo / Remote Repo
Server
Source Code
Working Copy
$ git fetch
fetching changes
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
Remote
Upstream Repo / Remote Repo
Server
Source Code
Working Copy
$ git merge FETCHED_HEAD
updating working copy
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
Remote
Upstream Repo / Remote Repo
Server
Source Code
Working Copy
$ git pull
git fetch + git merge
ge!ing changes to source code
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
Remote
Upstream Repo / Remote Repo
Server
Source Code
Working Copy
want to update last commit
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
Remote
Upstream Repo / Remote Repo
Server
Source Code
Working Copy
$ git reset --soft $ git commit --amend/ so" reseting
cannot be reached
Only the cache for
the commit you reseted
is removed from staging area
for your current branch
folder
folder
folder
file
file
file
commit
folder
commit
folder
file
folder
folder
commit
branch
HEAD
file
For more details, refer to book
Git Internals by Scott Chacon
$ git reset --soft $ git commit --amend/ so" reseting
folder
folder
folder
file
file
file
commit
folder
commit
folder
file
folder
folder
commit
branch
HEAD
file
For more details, refer to book
Git Internals by Scott Chacon
$ git reset --soft $ git commit --amend/ so" reseting
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
Remote
Upstream Repo / Remote Repo
Server
Source Code
Working Copy
want to squash or change last commits
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
Remote
Upstream Repo / Remote Repo
Server
Source Code
Working Copy
$ git reset --mixed
mixed reseting
cannot be reached
entries for commits, files
and folders are removed
from staging area
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
Remote
Upstream Repo / Remote Repo
Server
Source Code
Working Copy
want to get rid of last commits
Object Database
.git Folder / Object Database
Cache
Staging Area / The Index
Remote
Upstream Repo / Remote Repo
Server
Source Code
Working Copy
$ git reset --hard
hard reseting
cannot be reached
removed from staging area
removed from working copy
are you brave enough to
jump to any commit ?
jump to a branch
create a branch from a commit
create a branch from a tag
ANTIPATTERN DANGER
$ git checkout feature/PA-121
$ git checkout -b fix/missing-sign-parameter 2449be8
$ git checkout -b hotfix/v1.1 tags/v1
2BROKEN TIME MACHINE ANTI-PATTERN
are you sure?
are you brave enough to
jump to any commit ?
do you have
loooooong living
topic branches ?
ANTIPATTERN DANGER
3LONG LIVING BRANCHES ANTI-PATTERN
do you have
loooooong living
topic branches ?
welcome to
merge hell
before merging
do you validate commits
back to source ?
ANTIPATTERN DANGER
code review, continuous integration, automated testing…
4TOO LATE TO VALIDATE ANTI-PATTERN
before merging
do you validate commits
back to source ? areyou
sure?
merge and unmerge
do you o!en want to
just before releases ?
ANTIPATTERN DANGER
5CHERRY-PICK OBSSESSION ANTI-PATTERN
merge and unmerge
do you o!en want to
just before releases ?
master
HEAD
TAG/v13
version 14
$ git cherry-pick Every-Single-Commit-We-Want-To-Deploy
the commit graph ?
do you fully understand
ANTIPATTERN DANGER
6DEATH ON COMMIT GRAPH ANTI-PATTERN
the commit graph ?
do you fully understand
topic and shared branches, tracking branches, tags, HEADs, merge commits, reverted commits…
Cure?
Commit Early, Commit O"en
Perfect Later, Publish Once
STEP 0
split your big feature into
mini shippable tasks
master
HEAD
TOPIC
ORIGIN/master
refactorings
tasks, like rest endpoints
testable, deployable
each task will have a
branch, not a feature
STEP 1
commit early
commit o!en
no need to compile
no need for CI
it’s only for versioning
do not push
master
HEAD
TOPIC
ORIGIN/master
always pull with rebase
$ git pull --rebase origin master
to get forced pushes securely
to rebase your commits
master
HEAD
TOPIC
STEP 2
ORIGIN/master
always pull with rebase
$ git pull --rebase origin master
to get forced pushes securely
to rebase your commits
master
HEAD
TOPIC
STEP 2
ORIGIN/master
always pull with rebase
$ git pull --rebase origin master
to get forced pushes securely
to rebase your commits
master
HEAD
TOPIC
STEP 2
ORIGIN/master
if you branch is pushed already
$ git push -f
always pull with rebase
$ git pull --rebase origin master
to get forced pushes securely
to rebase your commitsmaster
HEAD
TOPIC
STEP 2
ORIGIN/master
if you branch is pushed already
$ git push -f
Sync source branch a!erwards
$ git fetch origin master:master
perfect later
make it single commit
$ git reset HEAD~3
or
$ git rebase -i HEAD~3
HEAD
TOPIC
STEP 3
ORIGIN/master
tests are passing
app is working
code is reviewed (*)
master
$ git reset HEAD~3 (then commit)
or
$ git rebase -i HEAD~3
HEAD
TOPIC
STEP 3
ORIGIN/master
perfect later
make it single commit
tests are passing
app is working
code is reviewed (*)
master
Use feature flags/toggles
HEAD
TOPIC
STEP 4
ORIGIN/master
if feature should be disabled
merge back to source
$ git checkout master
$ git merge topic
master
Use feature flags/toggles
master
HEAD
TOPIC
STEP 4
ORIGIN/master
if feature should be disabled
merge back to source
$ git checkout master
$ git merge topic
Continuous Integration
validates master branch
continuouslymaster
HEAD
TOPIC
ORIGIN/master
Pull requests can be
used to review code
and to validate before
merging back to master
Scrum tasks are
mapped to commits,
not stories
Github Flow can be
used to govern overall
TAMING
THE POWER OF GIT
make git the king again
Feature flags should be
used whenever possible
Commit early & o"en
perfect later, publish
once philosophy
Deliver frequently
be prepared to send
every single commit
Deleting branches a"er
merge will make your
commit graph readable
use terminal
GUIs are prison balls of developers
it’s ok to use GUIs while checking diffs,
resolving conflicts and viewing commit graph
BUTTON ADDICT ANTI-PATTERN
7
ANTIPATTERN DANGER
do not lose
take extra care while using hard reset
$ git reset --merge HEAD~
Use stash $ git stash save “updates local settings to keep db safe”
$ git reset --hard HEAD~
$ git stash apply stash@{0}
Create a new branch $ git checkout -b feature/PA-121
$ git add settings.xml
$ git commit -m “adds new settings config”
Use hard reset
with merge
and commit into it
uncommited changes
CODE LOSING SYNDROME ANTI-PATTERN
8
ANTIPATTERN DANGER
TOPIC
HEAD
MASTER
$ git merge --squash fix
Squash commit -- not updating HEAD
Automatic merge went well; stopped before committing as requested
$ git add .
$ git commit -m “adds a feature”
$ git branch -D topic
TRASH HOUSE ANTI-PATTERN
9
long living branches with care
handle
ANTIPATTERN DANGER
Squash all commits in your topic branch and 

make them available in working copy
long living branches with care
handle
TOPIC
HEAD
MASTER
$ git merge --squash fix
Squash commit -- not updating HEAD
Automatic merge went well; stopped before committing as requested
$ git add .
$ git commit -m “adds a feature”
$ git branch -D topic
Squash all commits in your topic branch and 

make them available in working copy
stop adding
prevent commits from being big ball of muds
every change
OMNIBUS BILL ANTI-PATTERN
10
ANTIPATTERN DANGER
stop adding
prevent commits from being big ball of muds
every change
local change sets at JetBrains IDEs
stop adding every change
partial add
messages
are
read!
# WHAT
# <issue id> (this commit will...) <subject>
# WHY and HOW
# Explain why this change is being made
# RELATED
# Provide links or keys to any relevant issues or other resources
# REMEMBER
# use lower case in the subject line
# start with a verb in imperative tone in the subject line
# do not end the subject line with a period
# separate subject from body with a blank line
# use the body to explain what and why vs. how
# can use multiple lines with "-" for bullet points in body
$ git config --global commit.template ~/.git-commit-template.txt
$ git config --global commit.cleanup strip
use git commit
templates to
create be"er
commit messages
comtmi
F*CKING COMMIT MESSAGES ANTI-PATTERN
11
ANTIPATTERN DANGER
messages
are
read!
use git commit
templates to
create be"er
commit messages
comtmi
by adding new commits ?
do you rollback your mistakes
ANTIPATTERN DANGER
12MESS UP WITH THE ROLLBACK ANTI-PATTERN
hard reset the merge commit
$ git reset --hard HEAD~
if you haven't pushed yet
HEAD
MASTER
Bug fıx
never force push
and change the history
if you already pushed to shared branch
Bug fıx
HEAD
MASTER
revert the merge commit
$ git revert 8f937c6 -m 1
if you already pushed
Bug fıx
HEAD
MASTER
is not the only method
pushing commits to server
ANTIPATTERN DANGER
for sharing your code
13CENTRALIZED GIT ANTI-PATTERN
Git Pong Pairing
$ git remote add personA <URL>
$ git fetch personA
$ git checkout personA/master
$ git checkout -b feature/PA-231
add your changes and commit
$ git push personA feature/PA-231
A B
$ git checkout feature/PA-231
add your changes and commit
$ git pull personA feature/PA-231
with the ones in source
branch ?
how do you sync your commits
ANTIPATTERN DANGER
14MERGE FANATIC ANTI-PATTERN
Bug fıx
ladder pa!ern
occurs when premature merge happens
HEAD
MASTER
FIX
master
c1 c2 c3 c4 c7
HEAD
c5 c6c5 c6
use rebase $ git rebase master
FIX
master
c1 c2 c3 c4 c7
HEAD
c5 c6c5 c6
use rebase $ git rebase master
FIX
master
c1 c2 c3 c4 c7
HEAD
c5 c6c5 c6
use rebase $ git rebase master
FIX
master
c1 c2 c3 c4 c7
HEAD
c5 c6c5 c6
use rebase $ git rebase master
c5
REPLAY #1
FIX
master
c1 c2 c3 c4 c7
HEAD
c5 c6c5 c6
use rebase $ git rebase master
c5
REPLAY #2
c6c6
FIX
master
c1 c2 c3 c4 c7
HEAD
c5 c6c5 c6
use rebase $ git rebase master
c5
REWIND
c6c6
FIX
master
c1 c2 c3 c4 c7
HEAD
use rebase $ git rebase master
c5
FINALIZE
c6c6
deleting branches?
are you scared of
ANTIPATTERN DANGER
15BRANCH CEMETERY ANTI-PATTERN
delete merged local branches
$ git branch --merged | grep -v '^* master$' | grep -v '^  master$' | xargs git branch -d
delete remote branches
$ git branch -r --merged | grep -v master | sed 's/origin///'
| xargs -n 1 git push --delete origin
delete all merged local branches
$ git branch --merged | grep -v '^* master$' | grep -v '^  master$' | xargs git branch -d
delete all merged remote branches
$ git branch -r --merged | grep -v master | sed 's/origin///'
| xargs -n 1 git push --delete origin
wri!en in any form?
anyone can push any code
ANTIPATTERN DANGER
16UNCONTROLLED POWER ANTI-PATTERN
use
pre-receive
hooks
Depend on each other
Too many repositories
ANTIPATTERN DANGER
for sharing your code
17WEB OF REPOSITORIES ANTI-PATTERN
Mono Repository
System
Even though our services are still developed and deployed
independently, the code for all services lives in one
repository
The repository contains more than one logical project (e.g.
an iOS client and a web-application)
These projects are most likely unrelated, loosely
connected or can be connected by other means (e.g via
dependency management tools)
Twi#er, Facebook, Google, Digital Ocean,
Foursquare, Etsy, Shippable, Plataformatec, Ravelin
You can not do CI without using monorepos
- Xebia
“When you start a new project,” Potvin tells WIRED, “you
have a wealth of libraries already available to you. Almost
everything has already been done.”
- Rachel Potvin, Engineering Manager at Google
Our productivity has increased at least 5x.
- Shippable
v1, v2, v3…
having branch for every release
ANTIPATTERN DANGER
18ORACLE SYNDROME ANTI-PATTERN
at the same time
Commit early & o"en
perfect later, publish
once philosophy
Deploy frequently
be prepared to send
every single commit
Newer keep release
branches for a long time
master branch should be
enough for all your needs
to git repo
you pushed confidential info
ANTIPATTERN DANGER
19WAITING FOR HACKERS ANTI-PATTERN
Ref: https://help.github.com/articles/remove-sensitive-data/
Do you know what evil merge is?
ANTIPATTERN DANGER
20EVIL MERGE ANTI-PATTERN
do you use feature branches
when there is no product at all
ANTIPATTERN DANGER
21BRANCH OVERDOSE ANTI-PATTERN
use single branch
topic branches simply
make everything more
complex
Scared on using git commands
ANTIPATTERN DANGER
22CHUCKY THE COMMAND ANTI-PATTERN
push
add
dosya güncelleme
committed
Track ediliyor
untracked unmodified pushedmodified
staged
Staging Alanında Local Repoda Uzak Repoda
added
add
commitcommit
hard reset
committed
Track ediliyor
untracked unmodified pushedmodified
staged
Staging Alanında Local Repoda Uzak Repoda
added
hard reset
hard reset
mixed reset
mixed reset
soft reset
rm --cached
rm
x
h"ps://github.com/lemiorhan/git-kata
no one knows git perfect
do you suffer?
ANTIPATTERN DANGER
23NO HERO TO SAVE LIVES ANTI-PATTERN
have a git-man
at least one developer
should expertise on git
for supporting the
others
Having duplicate commits
&
Having irrelevant merge commits
if you haven’t pushed yet
ANTIPATTERN DANGER
24DUPLICATE COMMITS ANTI-PATTERN
UPSTREAM
LOCAL
master
c1 c2 c3 c4 c7
c5 c6c5 c6
FIX
HEAD
master
c1 c2 c3 c4 c7
c5 c6c5 c6
FIX
rebase and push
UPSTREAM
LOCAL
master
c1 c2 c3 c4 c7
c5 c6c5’ c6’
FIX
HEAD
master
c1 c2 c3 c4 c7
c5 c6c5 c6
FIX
$ git rebase master
rebase and push
UPSTREAM
LOCAL
master
c1 c2 c3 c4 c7
c5 c6c5’ c6’
FIX
HEAD
master
c1 c2 c3 c4 c7
c5 c6c5’ c6’
FIX
$ git push -f
rebase and push
UPSTREAM
LOCAL
master
c1 c2 c3 c4 c7
c5 c6c5 c6
FIX
HEAD
master
c1 c2 c3 c4 c7
c5 c6c5’ c6’
FIX
pull rebased branch
UPSTREAM
LOCAL
master
c1 c2 c3 c4 c7
c5 c6c5’ c6’
FIX
HEAD
master
c1 c2 c3 c4 c7
c5 c6c5’ c6’
FIX
$ git pull --rebase
pull rebased branch
UPSTREAM
LOCAL
master
c1 c2 c3 c4 c7
c5 c6c5 c6
FIX
HEAD
master
c1 c2 c3 c4 c7
c5 c6c5’ c6’
FIX
c5 c6c5’ c6’
ORIGIN/FIX
$ git pull
pull rebased branch:(
UPSTREAM
LOCAL
c1 c2 c3 c4 c7
c5 c6c5 c6
master
c1 c2 c3 c4 c7
c5 c6c5’ c6’
FIX
c5 c6c5’ c6’
c8
$ git pull
master
FIX
HEAD
ORIGIN/FIX
pull rebased branch:(
we commit when we have
something big
ANTIPATTERN DANGER
25BIG FAT COMMIT ANTI-PATTERN
use TDD style
whenever tests pass, commit
that makes you commit early and o!en
are you scared of using rebase?
ANTIPATTERN DANGER
26REBASE-FOBIA ANTI-PATTERN
rebasenot to merge your unpushed
commits with the fetched ones
use pull with
prepared by @lemiorhan
rebaseto get rebased commits
from upstream safely
use pull with
REBASEfeature branches to integrate
into public branches
that you pushed
or that you pulled
from another person
Never use Rebase
USE
do you know when we get
conflicts and how to resolve it?
ANTIPATTERN DANGER
27CONFLICT-FOBIA ANTI-PATTERN
RECAP
what was really
happened at that time?
LET’S
master
TAG/v1.1
login
HEAD
DETACHED HEAD STATE
$ git checkout cecd95914
Note: checking out 'cecd95914'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
LIVING AT DETACHED HEAD STATE ANTI-PATTERN
28
ANTIPATTERN DANGER
master
TAG/v1.1
login
HEAD
DETACHED HEAD STATE
$ git rebase (and conflicts happen)
$ git checkout HEAD~2
$ git checkout 43e3ab01
$ git checkout tags/v1.1
WHEN IT HAPPENS
master
TAG/v1.1
login
HEAD
poor little developer...
master
TAG/v1.1
login
HEAD
$ git checkout master
master
TAG/v1.1
login
HEAD
$ git reflog
aa67e3a2c HEAD@{0}: rebase finished: returning to refs/heads/fix/java-sql-Date-violates-LSR
aa67e3a2c HEAD@{1}: rebase: fixes UnsupportedOperationException while calling toIstant() method of java.sql.Date
a45f3c4e5 HEAD@{2}: rebase: checkout develop
630ddad6e HEAD@{3}: checkout: moving from develop to fix/java-sql-Date-violates-LSR
b26cf7a1a HEAD@{4}: rebase: checkout develop
630ddad6e HEAD@{5}: checkout: moving from develop to fix/java-sql-Date-violates-LSR
b26cf7a1a HEAD@{6}: pull: Fast-forward
8b59f8f50 HEAD@{7}: checkout: moving from fix/java-sql-Date-violates-LSR to develop
$ git reflog
630ddad6e
the one we are
searching for
master
TAG/v1.1
login
HEAD
aa67e3a2c HEAD@{0}: rebase finished: returning to refs/heads/fix/java-sql-Date-violates-LSR
aa67e3a2c HEAD@{1}: rebase: fixes UnsupportedOperationException while calling toIstant() method of java.sql.Date
a45f3c4e5 HEAD@{2}: rebase: checkout develop
630ddad6e HEAD@{3}: checkout: moving from develop to fix/java-sql-Date-violates-LSR
b26cf7a1a HEAD@{4}: rebase: checkout develop
630ddad6e HEAD@{5}: checkout: moving from develop to fix/java-sql-Date-violates-LSR
b26cf7a1a HEAD@{6}: pull: Fast-forward
8b59f8f50 HEAD@{7}: checkout: moving from fix/java-sql-Date-violates-LSR to develop
master
typofix
TAG/v1.1
login
HEAD
$ git branch typofix 630ddad6e
master
typofix
TAG/v1.1
login
HEAD
$ git branch typofix 630ddad6e
KEEP CALM, NOTHING WILL BE LOST
LEMi ORHAN ERGiN
agile software craftsman @ iyzico
/lemiorhan
lemiorhanergin.com
@lemiorhan
ANTIPATTERN DANGER

Weitere ähnliche Inhalte

Was ist angesagt?

RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계Jinho Yoo
 
OWASP AppSecEU 2018 – Attacking "Modern" Web Technologies
OWASP AppSecEU 2018 – Attacking "Modern" Web TechnologiesOWASP AppSecEU 2018 – Attacking "Modern" Web Technologies
OWASP AppSecEU 2018 – Attacking "Modern" Web TechnologiesFrans Rosén
 
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017Taehoon Kim
 
SSRF For Bug Bounties
SSRF For Bug BountiesSSRF For Bug Bounties
SSRF For Bug BountiesOWASP Nagpur
 
The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016
The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016
The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016Frans Rosén
 
pytest로 파이썬 코드 테스트하기
pytest로 파이썬 코드 테스트하기pytest로 파이썬 코드 테스트하기
pytest로 파이썬 코드 테스트하기Yeongseon Choe
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint NAVER D2
 
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기NHN FORWARD
 
PyCon Korea 2018 - 파이썬으로 학생 들여다보기
PyCon Korea 2018 - 파이썬으로 학생 들여다보기PyCon Korea 2018 - 파이썬으로 학생 들여다보기
PyCon Korea 2018 - 파이썬으로 학생 들여다보기Yungon Park
 
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...AWSKRUG - AWS한국사용자모임
 
안정적인 서비스 운영 2014.03
안정적인 서비스 운영   2014.03안정적인 서비스 운영   2014.03
안정적인 서비스 운영 2014.03Changyol BAEK
 
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유Hyojun Jeon
 
SJBoard Project Portfolio
SJBoard Project PortfolioSJBoard Project Portfolio
SJBoard Project PortfolioJuyoungKang7
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with SpringJoshua Long
 
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [6시내고양포CAT몬] : Cat Anti-aging Project based Style...
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [6시내고양포CAT몬] : Cat Anti-aging Project based Style...제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [6시내고양포CAT몬] : Cat Anti-aging Project based Style...
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [6시내고양포CAT몬] : Cat Anti-aging Project based Style...BOAZ Bigdata
 
Attacking thru HTTP Host header
Attacking thru HTTP Host headerAttacking thru HTTP Host header
Attacking thru HTTP Host headerSergey Belov
 
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색
[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색NAVER D2
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advanceDaeMyung Kang
 

Was ist angesagt? (20)

RESTful API 설계
RESTful API 설계RESTful API 설계
RESTful API 설계
 
OWASP AppSecEU 2018 – Attacking "Modern" Web Technologies
OWASP AppSecEU 2018 – Attacking "Modern" Web TechnologiesOWASP AppSecEU 2018 – Attacking "Modern" Web Technologies
OWASP AppSecEU 2018 – Attacking "Modern" Web Technologies
 
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
 
루시드웍스 퓨전 소개서
루시드웍스 퓨전  소개서루시드웍스 퓨전  소개서
루시드웍스 퓨전 소개서
 
SSRF For Bug Bounties
SSRF For Bug BountiesSSRF For Bug Bounties
SSRF For Bug Bounties
 
The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016
The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016
The Secret Life of a Bug Bounty Hunter – Frans Rosén @ Security Fest 2016
 
pytest로 파이썬 코드 테스트하기
pytest로 파이썬 코드 테스트하기pytest로 파이썬 코드 테스트하기
pytest로 파이썬 코드 테스트하기
 
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint [D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
[D2] java 애플리케이션 트러블 슈팅 사례 & pinpoint
 
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
 
PyCon Korea 2018 - 파이썬으로 학생 들여다보기
PyCon Korea 2018 - 파이썬으로 학생 들여다보기PyCon Korea 2018 - 파이썬으로 학생 들여다보기
PyCon Korea 2018 - 파이썬으로 학생 들여다보기
 
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
스타트업 나홀로 데이터 엔지니어: 데이터 분석 환경 구축기 - 천지은 (Tappytoon) :: AWS Community Day Onlin...
 
안정적인 서비스 운영 2014.03
안정적인 서비스 운영   2014.03안정적인 서비스 운영   2014.03
안정적인 서비스 운영 2014.03
 
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
 
Building Advanced XSS Vectors
Building Advanced XSS VectorsBuilding Advanced XSS Vectors
Building Advanced XSS Vectors
 
SJBoard Project Portfolio
SJBoard Project PortfolioSJBoard Project Portfolio
SJBoard Project Portfolio
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with Spring
 
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [6시내고양포CAT몬] : Cat Anti-aging Project based Style...
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [6시내고양포CAT몬] : Cat Anti-aging Project based Style...제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [6시내고양포CAT몬] : Cat Anti-aging Project based Style...
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [6시내고양포CAT몬] : Cat Anti-aging Project based Style...
 
Attacking thru HTTP Host header
Attacking thru HTTP Host headerAttacking thru HTTP Host header
Attacking thru HTTP Host header
 
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색
[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색[216]네이버 검색 사용자를 만족시켜라!   의도파악과 의미검색
[216]네이버 검색 사용자를 만족시켜라! 의도파악과 의미검색
 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advance
 

Ähnlich wie Git Anti-Patterns - Extended Version With 28 Common Anti-Patterns) - SCTurkey Meetup

Git Anti Patterns - XP Days Ukraine 2017
Git Anti Patterns - XP Days Ukraine 2017Git Anti Patterns - XP Days Ukraine 2017
Git Anti Patterns - XP Days Ukraine 2017Lemi Orhan Ergin
 
Git Anti-Patterns: How To Mess Up With Git and Love it Again - DevoxxPL 2017
Git Anti-Patterns: How To Mess Up With Git and Love it Again - DevoxxPL 2017Git Anti-Patterns: How To Mess Up With Git and Love it Again - DevoxxPL 2017
Git Anti-Patterns: How To Mess Up With Git and Love it Again - DevoxxPL 2017Lemi Orhan Ergin
 
Git Anti-Patterns: How To Mess Up With Git and Love it Again
Git Anti-Patterns: How To Mess Up With Git and Love it AgainGit Anti-Patterns: How To Mess Up With Git and Love it Again
Git Anti-Patterns: How To Mess Up With Git and Love it AgainLemi Orhan Ergin
 
How to Really Get Git
How to Really Get GitHow to Really Get Git
How to Really Get GitSusan Tan
 
A Quick Start - Version Control with Git
A Quick Start - Version Control with GitA Quick Start - Version Control with Git
A Quick Start - Version Control with GitDmitry Sheiko
 
Git Distributed Version Control System
Git   Distributed Version Control SystemGit   Distributed Version Control System
Git Distributed Version Control SystemVictor Wong
 
Introduction to Git
Introduction to GitIntroduction to Git
Introduction to GitRick Umali
 
Git the Docs: A fun, hands-on introduction to version control
Git the Docs: A fun, hands-on introduction to version controlGit the Docs: A fun, hands-on introduction to version control
Git the Docs: A fun, hands-on introduction to version controlBecky Todd
 
Getting some Git
Getting some GitGetting some Git
Getting some GitBADR
 
Git Started With Git
Git Started With GitGit Started With Git
Git Started With GitNick Quaranto
 
Jedi Mind Tricks for Git
Jedi Mind Tricks for GitJedi Mind Tricks for Git
Jedi Mind Tricks for GitJan Krag
 
Git - Get Ready To Use It
Git - Get Ready To Use ItGit - Get Ready To Use It
Git - Get Ready To Use ItDaniel Kummer
 
Git-ing out of your git messes
Git-ing out of  your git messesGit-ing out of  your git messes
Git-ing out of your git messesKatie Sylor-Miller
 
Introduction of Git
Introduction of GitIntroduction of Git
Introduction of GitWayne Chen
 

Ähnlich wie Git Anti-Patterns - Extended Version With 28 Common Anti-Patterns) - SCTurkey Meetup (20)

Git Anti Patterns - XP Days Ukraine 2017
Git Anti Patterns - XP Days Ukraine 2017Git Anti Patterns - XP Days Ukraine 2017
Git Anti Patterns - XP Days Ukraine 2017
 
Git Anti-Patterns: How To Mess Up With Git and Love it Again - DevoxxPL 2017
Git Anti-Patterns: How To Mess Up With Git and Love it Again - DevoxxPL 2017Git Anti-Patterns: How To Mess Up With Git and Love it Again - DevoxxPL 2017
Git Anti-Patterns: How To Mess Up With Git and Love it Again - DevoxxPL 2017
 
Git Anti-Patterns: How To Mess Up With Git and Love it Again
Git Anti-Patterns: How To Mess Up With Git and Love it AgainGit Anti-Patterns: How To Mess Up With Git and Love it Again
Git Anti-Patterns: How To Mess Up With Git and Love it Again
 
How to Really Get Git
How to Really Get GitHow to Really Get Git
How to Really Get Git
 
Git and github 101
Git and github 101Git and github 101
Git and github 101
 
A Quick Start - Version Control with Git
A Quick Start - Version Control with GitA Quick Start - Version Control with Git
A Quick Start - Version Control with Git
 
Git Distributed Version Control System
Git   Distributed Version Control SystemGit   Distributed Version Control System
Git Distributed Version Control System
 
Introduction to Git
Introduction to GitIntroduction to Git
Introduction to Git
 
Git the Docs: A fun, hands-on introduction to version control
Git the Docs: A fun, hands-on introduction to version controlGit the Docs: A fun, hands-on introduction to version control
Git the Docs: A fun, hands-on introduction to version control
 
Getting some Git
Getting some GitGetting some Git
Getting some Git
 
Git Started With Git
Git Started With GitGit Started With Git
Git Started With Git
 
Git
GitGit
Git
 
Jedi Mind Tricks for Git
Jedi Mind Tricks for GitJedi Mind Tricks for Git
Jedi Mind Tricks for Git
 
Introduction to Git (Greg Lonnon)
Introduction to Git (Greg Lonnon)Introduction to Git (Greg Lonnon)
Introduction to Git (Greg Lonnon)
 
Git - Get Ready To Use It
Git - Get Ready To Use ItGit - Get Ready To Use It
Git - Get Ready To Use It
 
Git-ing out of your git messes
Git-ing out of  your git messesGit-ing out of  your git messes
Git-ing out of your git messes
 
Jedi Mind Tricks in Git
Jedi Mind Tricks in GitJedi Mind Tricks in Git
Jedi Mind Tricks in Git
 
Becoming a Git Master
Becoming a Git MasterBecoming a Git Master
Becoming a Git Master
 
Introduction of Git
Introduction of GitIntroduction of Git
Introduction of Git
 
Gittalk
GittalkGittalk
Gittalk
 

Mehr von Lemi Orhan Ergin

Clean Software Design: The Practices to Make The Design Simple
Clean Software Design: The Practices to Make The Design SimpleClean Software Design: The Practices to Make The Design Simple
Clean Software Design: The Practices to Make The Design SimpleLemi Orhan Ergin
 
Unwritten Manual for Pair Programming
Unwritten Manual for Pair ProgrammingUnwritten Manual for Pair Programming
Unwritten Manual for Pair ProgrammingLemi Orhan Ergin
 
10 Faulty Behaviors of Code Review - Developer Summit Istanbul 2018
10 Faulty Behaviors of Code Review - Developer Summit Istanbul 201810 Faulty Behaviors of Code Review - Developer Summit Istanbul 2018
10 Faulty Behaviors of Code Review - Developer Summit Istanbul 2018Lemi Orhan Ergin
 
Yeni Nesil Yazılım Kültürü: Daha İyi Profesyoneller, Daha Kaliteli Yazılım, D...
Yeni Nesil Yazılım Kültürü: Daha İyi Profesyoneller, Daha Kaliteli Yazılım, D...Yeni Nesil Yazılım Kültürü: Daha İyi Profesyoneller, Daha Kaliteli Yazılım, D...
Yeni Nesil Yazılım Kültürü: Daha İyi Profesyoneller, Daha Kaliteli Yazılım, D...Lemi Orhan Ergin
 
Irresponsible Disclosure: Short Handbook of an Ethical Developer
Irresponsible Disclosure: Short Handbook of an Ethical DeveloperIrresponsible Disclosure: Short Handbook of an Ethical Developer
Irresponsible Disclosure: Short Handbook of an Ethical DeveloperLemi Orhan Ergin
 
Scrum Events and Artifacts in Action
Scrum Events and Artifacts in ActionScrum Events and Artifacts in Action
Scrum Events and Artifacts in ActionLemi Orhan Ergin
 
DevOps & Technical Agility: From Theory to Practice
DevOps & Technical Agility: From Theory to PracticeDevOps & Technical Agility: From Theory to Practice
DevOps & Technical Agility: From Theory to PracticeLemi Orhan Ergin
 
Fighting with Waste Driven Development - XP Days Ukraine 2017
Fighting with Waste Driven Development - XP Days Ukraine 2017Fighting with Waste Driven Development - XP Days Ukraine 2017
Fighting with Waste Driven Development - XP Days Ukraine 2017Lemi Orhan Ergin
 
Waste Driven Development - Agile Coaching Serbia Meetup
Waste Driven Development - Agile Coaching Serbia MeetupWaste Driven Development - Agile Coaching Serbia Meetup
Waste Driven Development - Agile Coaching Serbia MeetupLemi Orhan Ergin
 
Yazılım Geliştirme Kültürünün Kodları: Motivasyon, Teknik Mükemmellik ve İnov...
Yazılım Geliştirme Kültürünün Kodları: Motivasyon, Teknik Mükemmellik ve İnov...Yazılım Geliştirme Kültürünün Kodları: Motivasyon, Teknik Mükemmellik ve İnov...
Yazılım Geliştirme Kültürünün Kodları: Motivasyon, Teknik Mükemmellik ve İnov...Lemi Orhan Ergin
 
Clean Software Design - DevNot Summit Istanbul 2017
Clean Software Design - DevNot Summit Istanbul 2017Clean Software Design - DevNot Summit Istanbul 2017
Clean Software Design - DevNot Summit Istanbul 2017Lemi Orhan Ergin
 
Test Driven Design - GDG DevFest Istanbul 2016
Test Driven Design - GDG DevFest Istanbul 2016Test Driven Design - GDG DevFest Istanbul 2016
Test Driven Design - GDG DevFest Istanbul 2016Lemi Orhan Ergin
 
Let The Elephants Leave The Room - Remove Waste in Software Development - Bos...
Let The Elephants Leave The Room - Remove Waste in Software Development - Bos...Let The Elephants Leave The Room - Remove Waste in Software Development - Bos...
Let The Elephants Leave The Room - Remove Waste in Software Development - Bos...Lemi Orhan Ergin
 
Happy Developer's Guide to the Galaxy: Thinking About Motivation of Developers
Happy Developer's Guide to the Galaxy: Thinking About Motivation of DevelopersHappy Developer's Guide to the Galaxy: Thinking About Motivation of Developers
Happy Developer's Guide to the Galaxy: Thinking About Motivation of DevelopersLemi Orhan Ergin
 
Git - Bildiğiniz Gibi Değil
Git - Bildiğiniz Gibi DeğilGit - Bildiğiniz Gibi Değil
Git - Bildiğiniz Gibi DeğilLemi Orhan Ergin
 
Code Your Agility - Tips for Boosting Technical Agility in Your Organization
Code Your Agility - Tips for Boosting Technical Agility in Your OrganizationCode Your Agility - Tips for Boosting Technical Agility in Your Organization
Code Your Agility - Tips for Boosting Technical Agility in Your OrganizationLemi Orhan Ergin
 
Lost in Motivation in an Agile World
Lost in Motivation in an Agile WorldLost in Motivation in an Agile World
Lost in Motivation in an Agile WorldLemi Orhan Ergin
 
TDD - Inevitable Challenge for Software Developers (phpkonf15 keynote)
TDD - Inevitable Challenge for Software Developers (phpkonf15 keynote)TDD - Inevitable Challenge for Software Developers (phpkonf15 keynote)
TDD - Inevitable Challenge for Software Developers (phpkonf15 keynote)Lemi Orhan Ergin
 
Unleashed Power Behind The Myths: Pair Programming (CraftSummit15)
Unleashed Power Behind The Myths: Pair Programming (CraftSummit15)Unleashed Power Behind The Myths: Pair Programming (CraftSummit15)
Unleashed Power Behind The Myths: Pair Programming (CraftSummit15)Lemi Orhan Ergin
 
Trespassing The Forgotten and Abandoned: Ethics in Software Development
Trespassing The Forgotten and Abandoned:  Ethics in Software DevelopmentTrespassing The Forgotten and Abandoned:  Ethics in Software Development
Trespassing The Forgotten and Abandoned: Ethics in Software DevelopmentLemi Orhan Ergin
 

Mehr von Lemi Orhan Ergin (20)

Clean Software Design: The Practices to Make The Design Simple
Clean Software Design: The Practices to Make The Design SimpleClean Software Design: The Practices to Make The Design Simple
Clean Software Design: The Practices to Make The Design Simple
 
Unwritten Manual for Pair Programming
Unwritten Manual for Pair ProgrammingUnwritten Manual for Pair Programming
Unwritten Manual for Pair Programming
 
10 Faulty Behaviors of Code Review - Developer Summit Istanbul 2018
10 Faulty Behaviors of Code Review - Developer Summit Istanbul 201810 Faulty Behaviors of Code Review - Developer Summit Istanbul 2018
10 Faulty Behaviors of Code Review - Developer Summit Istanbul 2018
 
Yeni Nesil Yazılım Kültürü: Daha İyi Profesyoneller, Daha Kaliteli Yazılım, D...
Yeni Nesil Yazılım Kültürü: Daha İyi Profesyoneller, Daha Kaliteli Yazılım, D...Yeni Nesil Yazılım Kültürü: Daha İyi Profesyoneller, Daha Kaliteli Yazılım, D...
Yeni Nesil Yazılım Kültürü: Daha İyi Profesyoneller, Daha Kaliteli Yazılım, D...
 
Irresponsible Disclosure: Short Handbook of an Ethical Developer
Irresponsible Disclosure: Short Handbook of an Ethical DeveloperIrresponsible Disclosure: Short Handbook of an Ethical Developer
Irresponsible Disclosure: Short Handbook of an Ethical Developer
 
Scrum Events and Artifacts in Action
Scrum Events and Artifacts in ActionScrum Events and Artifacts in Action
Scrum Events and Artifacts in Action
 
DevOps & Technical Agility: From Theory to Practice
DevOps & Technical Agility: From Theory to PracticeDevOps & Technical Agility: From Theory to Practice
DevOps & Technical Agility: From Theory to Practice
 
Fighting with Waste Driven Development - XP Days Ukraine 2017
Fighting with Waste Driven Development - XP Days Ukraine 2017Fighting with Waste Driven Development - XP Days Ukraine 2017
Fighting with Waste Driven Development - XP Days Ukraine 2017
 
Waste Driven Development - Agile Coaching Serbia Meetup
Waste Driven Development - Agile Coaching Serbia MeetupWaste Driven Development - Agile Coaching Serbia Meetup
Waste Driven Development - Agile Coaching Serbia Meetup
 
Yazılım Geliştirme Kültürünün Kodları: Motivasyon, Teknik Mükemmellik ve İnov...
Yazılım Geliştirme Kültürünün Kodları: Motivasyon, Teknik Mükemmellik ve İnov...Yazılım Geliştirme Kültürünün Kodları: Motivasyon, Teknik Mükemmellik ve İnov...
Yazılım Geliştirme Kültürünün Kodları: Motivasyon, Teknik Mükemmellik ve İnov...
 
Clean Software Design - DevNot Summit Istanbul 2017
Clean Software Design - DevNot Summit Istanbul 2017Clean Software Design - DevNot Summit Istanbul 2017
Clean Software Design - DevNot Summit Istanbul 2017
 
Test Driven Design - GDG DevFest Istanbul 2016
Test Driven Design - GDG DevFest Istanbul 2016Test Driven Design - GDG DevFest Istanbul 2016
Test Driven Design - GDG DevFest Istanbul 2016
 
Let The Elephants Leave The Room - Remove Waste in Software Development - Bos...
Let The Elephants Leave The Room - Remove Waste in Software Development - Bos...Let The Elephants Leave The Room - Remove Waste in Software Development - Bos...
Let The Elephants Leave The Room - Remove Waste in Software Development - Bos...
 
Happy Developer's Guide to the Galaxy: Thinking About Motivation of Developers
Happy Developer's Guide to the Galaxy: Thinking About Motivation of DevelopersHappy Developer's Guide to the Galaxy: Thinking About Motivation of Developers
Happy Developer's Guide to the Galaxy: Thinking About Motivation of Developers
 
Git - Bildiğiniz Gibi Değil
Git - Bildiğiniz Gibi DeğilGit - Bildiğiniz Gibi Değil
Git - Bildiğiniz Gibi Değil
 
Code Your Agility - Tips for Boosting Technical Agility in Your Organization
Code Your Agility - Tips for Boosting Technical Agility in Your OrganizationCode Your Agility - Tips for Boosting Technical Agility in Your Organization
Code Your Agility - Tips for Boosting Technical Agility in Your Organization
 
Lost in Motivation in an Agile World
Lost in Motivation in an Agile WorldLost in Motivation in an Agile World
Lost in Motivation in an Agile World
 
TDD - Inevitable Challenge for Software Developers (phpkonf15 keynote)
TDD - Inevitable Challenge for Software Developers (phpkonf15 keynote)TDD - Inevitable Challenge for Software Developers (phpkonf15 keynote)
TDD - Inevitable Challenge for Software Developers (phpkonf15 keynote)
 
Unleashed Power Behind The Myths: Pair Programming (CraftSummit15)
Unleashed Power Behind The Myths: Pair Programming (CraftSummit15)Unleashed Power Behind The Myths: Pair Programming (CraftSummit15)
Unleashed Power Behind The Myths: Pair Programming (CraftSummit15)
 
Trespassing The Forgotten and Abandoned: Ethics in Software Development
Trespassing The Forgotten and Abandoned:  Ethics in Software DevelopmentTrespassing The Forgotten and Abandoned:  Ethics in Software Development
Trespassing The Forgotten and Abandoned: Ethics in Software Development
 

Kürzlich hochgeladen

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is insideshinachiaurasa2
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfonteinmasabamasaba
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfayushiqss
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...masabamasaba
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...masabamasaba
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Hararemasabamasaba
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburgmasabamasaba
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrandmasabamasaba
 
Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsBert Jan Schrijver
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 

Kürzlich hochgeladen (20)

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 

Git Anti-Patterns - Extended Version With 28 Common Anti-Patterns) - SCTurkey Meetup

  • 1. GITANTI PATTERNS How To Mess Up With Git and Love It Again LEMi ORHAN ERGiN Agile Software Craftsman, iyzico /lemiorhan lemiorhanergin.com @lemiorhan 28 common git anti-patterns
  • 2. DISCLOSURE There is no formula for using git efficiently. Opinions are my own. It means the opposites might work perfectly for your conditions.
  • 3. git is powerful but you have to know using it properly
  • 4. Are you using git if all you do is commit-push-pull use dropbox instead ANTIPATTERN DANGER as if it is dropbox ? 1DROPBOX-ISH GIT ANTI-PATTERN
  • 5. learn how git works no worries, I will cover how git behaves
  • 6. the way it keeps FILES & FOLDERS working copy staging area objects database repository the way it keeps REFERENCES directed acyclic graph keeping snapshots traversing graph branches, tags, heads git has 2 mechanisms
  • 7. Source Code Working Copy you want to version changes
  • 8. Source Code Working Copy $ git init Object Database .git Folder / Object Database Cache Staging Area / The Index initializing repo
  • 9. Source Code Working Copy $ git init --bare Object Database .git Folder / Object Database Cache Staging Area / The Index Remote Upstream Repo / Remote Repo Server initializing bare repo
  • 10. Object Database .git Folder / Object Database Cache Staging Area / The Index Remote Upstream Repo / Remote Repo Server Source Code Working Copy $ git add . preparing commits
  • 12. Object Database .git Folder / Object Database Cache Staging Area / The Index Remote Upstream Repo / Remote Repo Server Source Code Working Copy $ git add . preparing commits
  • 13. Object Database .git Folder / Object Database Cache Staging Area / The Index Remote Upstream Repo / Remote Repo Server Source Code Working Copy $ git commit -m “initial commit” commi!ing
  • 14. $ git commit -m “initial commit” commi!ing folder folder folder file file file commit branch HEAD For more details, refer to book Git Internals by Scott Chacon
  • 15. folder folder folder file file file commit $ git commit -m “second commit” commi!ing folder commit branch HEAD folder file folder For more details, refer to book Git Internals by Scott Chacon
  • 16. folder folder folder file file file commit $ git commit -m “third commit” commi!ing folder commit folder file folder folder commit branch HEAD file For more details, refer to book Git Internals by Scott Chacon
  • 17. Object Database .git Folder / Object Database Cache Staging Area / The Index Remote Upstream Repo / Remote Repo Server Source Code Working Copy $ git commit -m “initial commit” commi!ing
  • 18. Object Database .git Folder / Object Database Cache Staging Area / The Index Remote Upstream Repo / Remote Repo Server Source Code Working Copy $ git remote add origin http://upstream.repo $ git push -u origin master pushing to remote
  • 19. Object Database .git Folder / Object Database Cache Staging Area / The Index Remote Upstream Repo / Remote Repo Server Source Code Working Copy new changes from others are pushed
  • 20. Object Database .git Folder / Object Database Cache Staging Area / The Index Remote Upstream Repo / Remote Repo Server Source Code Working Copy $ git fetch fetching changes
  • 21. Object Database .git Folder / Object Database Cache Staging Area / The Index Remote Upstream Repo / Remote Repo Server Source Code Working Copy $ git merge FETCHED_HEAD updating working copy
  • 22. Object Database .git Folder / Object Database Cache Staging Area / The Index Remote Upstream Repo / Remote Repo Server Source Code Working Copy $ git pull git fetch + git merge ge!ing changes to source code
  • 23. Object Database .git Folder / Object Database Cache Staging Area / The Index Remote Upstream Repo / Remote Repo Server Source Code Working Copy want to update last commit
  • 24. Object Database .git Folder / Object Database Cache Staging Area / The Index Remote Upstream Repo / Remote Repo Server Source Code Working Copy $ git reset --soft $ git commit --amend/ so" reseting cannot be reached Only the cache for the commit you reseted is removed from staging area for your current branch
  • 25. folder folder folder file file file commit folder commit folder file folder folder commit branch HEAD file For more details, refer to book Git Internals by Scott Chacon $ git reset --soft $ git commit --amend/ so" reseting
  • 26. folder folder folder file file file commit folder commit folder file folder folder commit branch HEAD file For more details, refer to book Git Internals by Scott Chacon $ git reset --soft $ git commit --amend/ so" reseting
  • 27. Object Database .git Folder / Object Database Cache Staging Area / The Index Remote Upstream Repo / Remote Repo Server Source Code Working Copy want to squash or change last commits
  • 28. Object Database .git Folder / Object Database Cache Staging Area / The Index Remote Upstream Repo / Remote Repo Server Source Code Working Copy $ git reset --mixed mixed reseting cannot be reached entries for commits, files and folders are removed from staging area
  • 29. Object Database .git Folder / Object Database Cache Staging Area / The Index Remote Upstream Repo / Remote Repo Server Source Code Working Copy want to get rid of last commits
  • 30. Object Database .git Folder / Object Database Cache Staging Area / The Index Remote Upstream Repo / Remote Repo Server Source Code Working Copy $ git reset --hard hard reseting cannot be reached removed from staging area removed from working copy
  • 31. are you brave enough to jump to any commit ? jump to a branch create a branch from a commit create a branch from a tag ANTIPATTERN DANGER $ git checkout feature/PA-121 $ git checkout -b fix/missing-sign-parameter 2449be8 $ git checkout -b hotfix/v1.1 tags/v1 2BROKEN TIME MACHINE ANTI-PATTERN
  • 32. are you sure? are you brave enough to jump to any commit ?
  • 33. do you have loooooong living topic branches ? ANTIPATTERN DANGER 3LONG LIVING BRANCHES ANTI-PATTERN
  • 34. do you have loooooong living topic branches ? welcome to merge hell
  • 35. before merging do you validate commits back to source ? ANTIPATTERN DANGER code review, continuous integration, automated testing… 4TOO LATE TO VALIDATE ANTI-PATTERN
  • 36. before merging do you validate commits back to source ? areyou sure?
  • 37. merge and unmerge do you o!en want to just before releases ? ANTIPATTERN DANGER 5CHERRY-PICK OBSSESSION ANTI-PATTERN
  • 38. merge and unmerge do you o!en want to just before releases ? master HEAD TAG/v13 version 14 $ git cherry-pick Every-Single-Commit-We-Want-To-Deploy
  • 39. the commit graph ? do you fully understand ANTIPATTERN DANGER 6DEATH ON COMMIT GRAPH ANTI-PATTERN
  • 40. the commit graph ? do you fully understand topic and shared branches, tracking branches, tags, HEADs, merge commits, reverted commits…
  • 41. Cure?
  • 42. Commit Early, Commit O"en Perfect Later, Publish Once
  • 43. STEP 0 split your big feature into mini shippable tasks master HEAD TOPIC ORIGIN/master refactorings tasks, like rest endpoints testable, deployable each task will have a branch, not a feature
  • 44. STEP 1 commit early commit o!en no need to compile no need for CI it’s only for versioning do not push master HEAD TOPIC ORIGIN/master
  • 45. always pull with rebase $ git pull --rebase origin master to get forced pushes securely to rebase your commits master HEAD TOPIC STEP 2 ORIGIN/master
  • 46. always pull with rebase $ git pull --rebase origin master to get forced pushes securely to rebase your commits master HEAD TOPIC STEP 2 ORIGIN/master
  • 47. always pull with rebase $ git pull --rebase origin master to get forced pushes securely to rebase your commits master HEAD TOPIC STEP 2 ORIGIN/master if you branch is pushed already $ git push -f
  • 48. always pull with rebase $ git pull --rebase origin master to get forced pushes securely to rebase your commitsmaster HEAD TOPIC STEP 2 ORIGIN/master if you branch is pushed already $ git push -f Sync source branch a!erwards $ git fetch origin master:master
  • 49. perfect later make it single commit $ git reset HEAD~3 or $ git rebase -i HEAD~3 HEAD TOPIC STEP 3 ORIGIN/master tests are passing app is working code is reviewed (*) master
  • 50. $ git reset HEAD~3 (then commit) or $ git rebase -i HEAD~3 HEAD TOPIC STEP 3 ORIGIN/master perfect later make it single commit tests are passing app is working code is reviewed (*) master
  • 51. Use feature flags/toggles HEAD TOPIC STEP 4 ORIGIN/master if feature should be disabled merge back to source $ git checkout master $ git merge topic master
  • 52. Use feature flags/toggles master HEAD TOPIC STEP 4 ORIGIN/master if feature should be disabled merge back to source $ git checkout master $ git merge topic
  • 53. Continuous Integration validates master branch continuouslymaster HEAD TOPIC ORIGIN/master Pull requests can be used to review code and to validate before merging back to master Scrum tasks are mapped to commits, not stories Github Flow can be used to govern overall TAMING THE POWER OF GIT make git the king again Feature flags should be used whenever possible Commit early & o"en perfect later, publish once philosophy Deliver frequently be prepared to send every single commit Deleting branches a"er merge will make your commit graph readable
  • 54. use terminal GUIs are prison balls of developers it’s ok to use GUIs while checking diffs, resolving conflicts and viewing commit graph BUTTON ADDICT ANTI-PATTERN 7 ANTIPATTERN DANGER
  • 55. do not lose take extra care while using hard reset $ git reset --merge HEAD~ Use stash $ git stash save “updates local settings to keep db safe” $ git reset --hard HEAD~ $ git stash apply stash@{0} Create a new branch $ git checkout -b feature/PA-121 $ git add settings.xml $ git commit -m “adds new settings config” Use hard reset with merge and commit into it uncommited changes CODE LOSING SYNDROME ANTI-PATTERN 8 ANTIPATTERN DANGER
  • 56. TOPIC HEAD MASTER $ git merge --squash fix Squash commit -- not updating HEAD Automatic merge went well; stopped before committing as requested $ git add . $ git commit -m “adds a feature” $ git branch -D topic TRASH HOUSE ANTI-PATTERN 9 long living branches with care handle ANTIPATTERN DANGER Squash all commits in your topic branch and 
 make them available in working copy
  • 57. long living branches with care handle TOPIC HEAD MASTER $ git merge --squash fix Squash commit -- not updating HEAD Automatic merge went well; stopped before committing as requested $ git add . $ git commit -m “adds a feature” $ git branch -D topic Squash all commits in your topic branch and 
 make them available in working copy
  • 58. stop adding prevent commits from being big ball of muds every change OMNIBUS BILL ANTI-PATTERN 10 ANTIPATTERN DANGER
  • 59. stop adding prevent commits from being big ball of muds every change local change sets at JetBrains IDEs
  • 60. stop adding every change partial add
  • 61. messages are read! # WHAT # <issue id> (this commit will...) <subject> # WHY and HOW # Explain why this change is being made # RELATED # Provide links or keys to any relevant issues or other resources # REMEMBER # use lower case in the subject line # start with a verb in imperative tone in the subject line # do not end the subject line with a period # separate subject from body with a blank line # use the body to explain what and why vs. how # can use multiple lines with "-" for bullet points in body $ git config --global commit.template ~/.git-commit-template.txt $ git config --global commit.cleanup strip use git commit templates to create be"er commit messages comtmi F*CKING COMMIT MESSAGES ANTI-PATTERN 11 ANTIPATTERN DANGER
  • 62. messages are read! use git commit templates to create be"er commit messages comtmi
  • 63. by adding new commits ? do you rollback your mistakes ANTIPATTERN DANGER 12MESS UP WITH THE ROLLBACK ANTI-PATTERN
  • 64. hard reset the merge commit $ git reset --hard HEAD~ if you haven't pushed yet HEAD MASTER Bug fıx
  • 65. never force push and change the history if you already pushed to shared branch Bug fıx HEAD MASTER
  • 66. revert the merge commit $ git revert 8f937c6 -m 1 if you already pushed Bug fıx HEAD MASTER
  • 67. is not the only method pushing commits to server ANTIPATTERN DANGER for sharing your code 13CENTRALIZED GIT ANTI-PATTERN
  • 68. Git Pong Pairing $ git remote add personA <URL> $ git fetch personA $ git checkout personA/master $ git checkout -b feature/PA-231 add your changes and commit $ git push personA feature/PA-231 A B $ git checkout feature/PA-231 add your changes and commit $ git pull personA feature/PA-231
  • 69. with the ones in source branch ? how do you sync your commits ANTIPATTERN DANGER 14MERGE FANATIC ANTI-PATTERN
  • 70. Bug fıx ladder pa!ern occurs when premature merge happens HEAD MASTER
  • 71. FIX master c1 c2 c3 c4 c7 HEAD c5 c6c5 c6 use rebase $ git rebase master
  • 72. FIX master c1 c2 c3 c4 c7 HEAD c5 c6c5 c6 use rebase $ git rebase master
  • 73. FIX master c1 c2 c3 c4 c7 HEAD c5 c6c5 c6 use rebase $ git rebase master
  • 74. FIX master c1 c2 c3 c4 c7 HEAD c5 c6c5 c6 use rebase $ git rebase master c5 REPLAY #1
  • 75. FIX master c1 c2 c3 c4 c7 HEAD c5 c6c5 c6 use rebase $ git rebase master c5 REPLAY #2 c6c6
  • 76. FIX master c1 c2 c3 c4 c7 HEAD c5 c6c5 c6 use rebase $ git rebase master c5 REWIND c6c6
  • 77. FIX master c1 c2 c3 c4 c7 HEAD use rebase $ git rebase master c5 FINALIZE c6c6
  • 78. deleting branches? are you scared of ANTIPATTERN DANGER 15BRANCH CEMETERY ANTI-PATTERN
  • 79. delete merged local branches $ git branch --merged | grep -v '^* master$' | grep -v '^  master$' | xargs git branch -d delete remote branches $ git branch -r --merged | grep -v master | sed 's/origin///' | xargs -n 1 git push --delete origin
  • 80. delete all merged local branches $ git branch --merged | grep -v '^* master$' | grep -v '^  master$' | xargs git branch -d delete all merged remote branches $ git branch -r --merged | grep -v master | sed 's/origin///' | xargs -n 1 git push --delete origin
  • 81. wri!en in any form? anyone can push any code ANTIPATTERN DANGER 16UNCONTROLLED POWER ANTI-PATTERN
  • 83. Depend on each other Too many repositories ANTIPATTERN DANGER for sharing your code 17WEB OF REPOSITORIES ANTI-PATTERN
  • 84. Mono Repository System Even though our services are still developed and deployed independently, the code for all services lives in one repository The repository contains more than one logical project (e.g. an iOS client and a web-application) These projects are most likely unrelated, loosely connected or can be connected by other means (e.g via dependency management tools) Twi#er, Facebook, Google, Digital Ocean, Foursquare, Etsy, Shippable, Plataformatec, Ravelin
  • 85. You can not do CI without using monorepos - Xebia “When you start a new project,” Potvin tells WIRED, “you have a wealth of libraries already available to you. Almost everything has already been done.” - Rachel Potvin, Engineering Manager at Google Our productivity has increased at least 5x. - Shippable
  • 86. v1, v2, v3… having branch for every release ANTIPATTERN DANGER 18ORACLE SYNDROME ANTI-PATTERN at the same time
  • 87. Commit early & o"en perfect later, publish once philosophy Deploy frequently be prepared to send every single commit Newer keep release branches for a long time master branch should be enough for all your needs
  • 88. to git repo you pushed confidential info ANTIPATTERN DANGER 19WAITING FOR HACKERS ANTI-PATTERN
  • 90. Do you know what evil merge is? ANTIPATTERN DANGER 20EVIL MERGE ANTI-PATTERN
  • 91.
  • 92. do you use feature branches when there is no product at all ANTIPATTERN DANGER 21BRANCH OVERDOSE ANTI-PATTERN
  • 93. use single branch topic branches simply make everything more complex
  • 94. Scared on using git commands ANTIPATTERN DANGER 22CHUCKY THE COMMAND ANTI-PATTERN
  • 95. push add dosya güncelleme committed Track ediliyor untracked unmodified pushedmodified staged Staging Alanında Local Repoda Uzak Repoda added add commitcommit
  • 96. hard reset committed Track ediliyor untracked unmodified pushedmodified staged Staging Alanında Local Repoda Uzak Repoda added hard reset hard reset mixed reset mixed reset soft reset rm --cached rm x
  • 98. no one knows git perfect do you suffer? ANTIPATTERN DANGER 23NO HERO TO SAVE LIVES ANTI-PATTERN
  • 99. have a git-man at least one developer should expertise on git for supporting the others
  • 100. Having duplicate commits & Having irrelevant merge commits if you haven’t pushed yet ANTIPATTERN DANGER 24DUPLICATE COMMITS ANTI-PATTERN
  • 101.
  • 102. UPSTREAM LOCAL master c1 c2 c3 c4 c7 c5 c6c5 c6 FIX HEAD master c1 c2 c3 c4 c7 c5 c6c5 c6 FIX rebase and push
  • 103. UPSTREAM LOCAL master c1 c2 c3 c4 c7 c5 c6c5’ c6’ FIX HEAD master c1 c2 c3 c4 c7 c5 c6c5 c6 FIX $ git rebase master rebase and push
  • 104. UPSTREAM LOCAL master c1 c2 c3 c4 c7 c5 c6c5’ c6’ FIX HEAD master c1 c2 c3 c4 c7 c5 c6c5’ c6’ FIX $ git push -f rebase and push
  • 105. UPSTREAM LOCAL master c1 c2 c3 c4 c7 c5 c6c5 c6 FIX HEAD master c1 c2 c3 c4 c7 c5 c6c5’ c6’ FIX pull rebased branch
  • 106. UPSTREAM LOCAL master c1 c2 c3 c4 c7 c5 c6c5’ c6’ FIX HEAD master c1 c2 c3 c4 c7 c5 c6c5’ c6’ FIX $ git pull --rebase pull rebased branch
  • 107. UPSTREAM LOCAL master c1 c2 c3 c4 c7 c5 c6c5 c6 FIX HEAD master c1 c2 c3 c4 c7 c5 c6c5’ c6’ FIX c5 c6c5’ c6’ ORIGIN/FIX $ git pull pull rebased branch:(
  • 108. UPSTREAM LOCAL c1 c2 c3 c4 c7 c5 c6c5 c6 master c1 c2 c3 c4 c7 c5 c6c5’ c6’ FIX c5 c6c5’ c6’ c8 $ git pull master FIX HEAD ORIGIN/FIX pull rebased branch:(
  • 109. we commit when we have something big ANTIPATTERN DANGER 25BIG FAT COMMIT ANTI-PATTERN
  • 110. use TDD style whenever tests pass, commit that makes you commit early and o!en
  • 111. are you scared of using rebase? ANTIPATTERN DANGER 26REBASE-FOBIA ANTI-PATTERN
  • 112. rebasenot to merge your unpushed commits with the fetched ones use pull with prepared by @lemiorhan rebaseto get rebased commits from upstream safely use pull with REBASEfeature branches to integrate into public branches that you pushed or that you pulled from another person Never use Rebase USE
  • 113. do you know when we get conflicts and how to resolve it? ANTIPATTERN DANGER 27CONFLICT-FOBIA ANTI-PATTERN
  • 114.
  • 115.
  • 116. RECAP what was really happened at that time? LET’S
  • 117. master TAG/v1.1 login HEAD DETACHED HEAD STATE $ git checkout cecd95914 Note: checking out 'cecd95914'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. LIVING AT DETACHED HEAD STATE ANTI-PATTERN 28 ANTIPATTERN DANGER
  • 118. master TAG/v1.1 login HEAD DETACHED HEAD STATE $ git rebase (and conflicts happen) $ git checkout HEAD~2 $ git checkout 43e3ab01 $ git checkout tags/v1.1 WHEN IT HAPPENS
  • 121. master TAG/v1.1 login HEAD $ git reflog aa67e3a2c HEAD@{0}: rebase finished: returning to refs/heads/fix/java-sql-Date-violates-LSR aa67e3a2c HEAD@{1}: rebase: fixes UnsupportedOperationException while calling toIstant() method of java.sql.Date a45f3c4e5 HEAD@{2}: rebase: checkout develop 630ddad6e HEAD@{3}: checkout: moving from develop to fix/java-sql-Date-violates-LSR b26cf7a1a HEAD@{4}: rebase: checkout develop 630ddad6e HEAD@{5}: checkout: moving from develop to fix/java-sql-Date-violates-LSR b26cf7a1a HEAD@{6}: pull: Fast-forward 8b59f8f50 HEAD@{7}: checkout: moving from fix/java-sql-Date-violates-LSR to develop
  • 122. $ git reflog 630ddad6e the one we are searching for master TAG/v1.1 login HEAD aa67e3a2c HEAD@{0}: rebase finished: returning to refs/heads/fix/java-sql-Date-violates-LSR aa67e3a2c HEAD@{1}: rebase: fixes UnsupportedOperationException while calling toIstant() method of java.sql.Date a45f3c4e5 HEAD@{2}: rebase: checkout develop 630ddad6e HEAD@{3}: checkout: moving from develop to fix/java-sql-Date-violates-LSR b26cf7a1a HEAD@{4}: rebase: checkout develop 630ddad6e HEAD@{5}: checkout: moving from develop to fix/java-sql-Date-violates-LSR b26cf7a1a HEAD@{6}: pull: Fast-forward 8b59f8f50 HEAD@{7}: checkout: moving from fix/java-sql-Date-violates-LSR to develop
  • 124. master typofix TAG/v1.1 login HEAD $ git branch typofix 630ddad6e KEEP CALM, NOTHING WILL BE LOST
  • 125. LEMi ORHAN ERGiN agile software craftsman @ iyzico /lemiorhan lemiorhanergin.com @lemiorhan ANTIPATTERN DANGER