git - bildiğiniz gibi değil

85
GIT bildi ğ iniz gibi de ğ il… lemi orhan ergin

Upload: lemi-orhan-ergin

Post on 21-Jan-2017

2.232 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Git - Bildiğiniz Gibi Değil

GITbildiğiniz gibi değil…

LEMİ ORHAN ERGİN

lemi orhan ergin

Page 2: Git - Bildiğiniz Gibi Değil

GIT bildiğiniz gibi değil…

LEMİ ORHAN ERGİNAgile Software Craftsman, ACM

2001’den bu yana yazılım geliştiriyor Agile Turkey topluluk lideri Software Craftsmanship Turkey kurucusu Yazılımcı, Mimar, Eğitmen, Koç, Danışman 2009’dan bu yana GitMan Sony & eBay/GittiGidiyor eski çalışanı ACM’de yönetici ortak

/lemiorhan lemiorhanergin.com @lemiorhan

Page 3: Git - Bildiğiniz Gibi Değil

Sürüm Yönetim Sistemleridijital dosyalar için bir zaman makinesidir

Sürüm Kontrol

Page 4: Git - Bildiğiniz Gibi Değil

Sürüm Kontrol

SistemleriMerkeziYerel

Dağıtık

Page 5: Git - Bildiğiniz Gibi Değil

Sadece dosya isimlerini kullanarak dosyaların sürümlerini belirler

YEREL Sürüm Kontrol Sistemi

Page 6: Git - Bildiğiniz Gibi Değil

Revision Control System revizyonları yamalar halinde (patch)

bir isimlendirme kuralına uygun şekilde saklar.

http://en.wikipedia.org/wiki/Revision_Control_System

YEREL Sürüm Kontrol Sistemi

Page 7: Git - Bildiğiniz Gibi Değil

merkezİSürüm Kontrol Sistemi

Dosyaları ortak bir alanda saklar (sunucu) ve herkes buraya kendi kişisel makinalarından erişir (istemci)

Page 8: Git - Bildiğiniz Gibi Değil

merkezİSürüm Kontrol Sistemi

Kullanıcılarda dosyaların sadece son sürümleri bulunur Eğer sunucu bozulursa, tüm sürümleri kaybetme ihtimali vardır

Page 9: Git - Bildiğiniz Gibi Değil

Sturgeon’nun Kuralı Der ki;

bir işe yaramaz

Yaptığımız şeylerin

%90’ıİşe yarayan

çözümleri bulabilmek için

deneysel çalışmalar yapabileceğimiz, korkmadan

sistemi dağıtabileceğimiz, güvenilir bir sisteme ihtiyaç vardır

Page 10: Git - Bildiğiniz Gibi Değil

DağıtıkSürüm Kontrol Sistemi

Her iki tipin avantajlarının birleşimi bir hibrit sistemdir

Page 11: Git - Bildiğiniz Gibi Değil

DağıtıkSürüm Kontrol Sistemi

Sunucuya erişim sorunlarına ve sunucudaki sürümlere bağımlılıktan endişe duymadan yerel değişiklikler yapabilmenizi sağlar

Page 12: Git - Bildiğiniz Gibi Değil

SVN gibi dağıtık olmayan sistemler

Dosya farkları şeklinde

Page 13: Git - Bildiğiniz Gibi Değil

Git değişiklikleri farklı tutar

Değişmiş dosyalar halinde

Page 14: Git - Bildiğiniz Gibi Değil

2.7Gb

8.2Gb

450MB

?MOZILLA350Mb kaynak kod İÇİN

1998’den bu yana yazılan

Ne kadar bİR DİSK ALANI GEREKLİ

Page 15: Git - Bildiğiniz Gibi Değil

Git Ortami

Page 16: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

.git Folder / Object Database

Page 17: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

.git Folder / Object Database

Page 18: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

.git Folder / Object Database

Page 19: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

.git Folder / Object Database

Page 20: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

.git Folder / Object Database

Page 21: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

.git Folder / Object Database

Page 22: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

.git Folder / Object Database

Page 23: Git - Bildiğiniz Gibi Değil

Sunucuya Kod Gönderme

Page 24: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

.git Folder / Object Database

Page 25: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

$ git add

.git Folder / Object Database

Page 26: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

$ git commit

.git Folder / Object Database

Page 27: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı.git Folder / Object Database

Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

$ git push

Page 28: Git - Bildiğiniz Gibi Değil

Sunucudan Güncellemeleri Alma

Page 29: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı.git Folder / Object Database

Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

Page 30: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı.git Folder / Object Database

Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

$ git fetch

Page 31: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

$ git merge FETCH_HEAD

.git Folder / Object Database

Page 32: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

$ git pullKISAYOL

.git Folder / Object Database

Page 33: Git - Bildiğiniz Gibi Değil

Kodu Sifirdan Alma

Page 34: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

.git Folder / Object Database

Page 35: Git - Bildiğiniz Gibi Değil

Kaynak KodWoking Copy

CacheStaging Area / The Index

Obje Veritabanı Uzak DepoUpstream Repo / Remote Repo

Kendi makinamız Sunucu

$ git cloneKISAYOL

.git Folder / Object Database

Page 36: Git - Bildiğiniz Gibi Değil

Bir Grup Kod Değişikliği: Commit

Page 37: Git - Bildiğiniz Gibi Değil

Kaliningrad, Prussia’daki 7 köprü

Yıl 1735

Page 38: Git - Bildiğiniz Gibi Değil

Königsberg, Prussia’daki 7 köprüYıl 1735

Her bir köprüden bir kez geçerek tüm şehri dolaşabilir misiniz?

Leonhard Euler

Page 39: Git - Bildiğiniz Gibi Değil

ÇİZGE TEORİSİ (Graph Theory)

Page 40: Git - Bildiğiniz Gibi Değil
Page 41: Git - Bildiğiniz Gibi Değil
Page 42: Git - Bildiğiniz Gibi Değil
Page 43: Git - Bildiğiniz Gibi Değil
Page 44: Git - Bildiğiniz Gibi Değil

klasör

klasör

klasör

dosya

dosya

dosya

Page 45: Git - Bildiğiniz Gibi Değil

klasör

klasör

klasör

dosya

dosya

dosya

GIT bildiğiniz gibi değil…

commit

$ git add . $ git commit -m “first commit”

Page 46: Git - Bildiğiniz Gibi Değil

klasör

klasör

klasör

dosya

dosya

dosya

GIT bildiğiniz gibi değil…

commit

branch

HEAD

$ git add . $ git commit -m “first commit”

Page 47: Git - Bildiğiniz Gibi Değil

klasör

klasör

klasör

dosya

dosya

dosya

GIT bildiğiniz gibi değil…

commit

klasör

klasör

klasör

dosya

commit

branch

HEAD

$ git add . $ git commit -m “second commit”

Page 48: Git - Bildiğiniz Gibi Değil

commit commit commit

klasör

klasör

klasör

dosya

dosya

dosya

GIT bildiğiniz gibi değil…

commit

klasör

klasör

klasör

dosya

commit

branch

HEAD

klasör

dosya

commit

$ git add . $ git commit -m “third commit”

Page 49: Git - Bildiğiniz Gibi Değil

GIT bildiğiniz gibi değil…

branch

HEAD

commit commit commit

$ git add . $ git commit -m “third commit”

Page 50: Git - Bildiğiniz Gibi Değil

d99108a master HEAD

$ git commit -m "first commit" [master (root-commit) d99108a] first commit

1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 .gitignore

Page 51: Git - Bildiğiniz Gibi Değil

d99108a

master HEADa4510bc

$ git commit -m "second commit" [master a4510bc] second commit 1 file changed, 1 insertion(+)

Page 52: Git - Bildiğiniz Gibi Değil

d99108a

master HEAD

a4510bc

b2be58f

$ git commit -m "third commit" [master b2be58f] third commit 1 file changed, 1 insertion(+)

Page 53: Git - Bildiğiniz Gibi Değil

d99108a

a4510bc

b2be58f

$ git commit -m "fourth commit" [master 8810ac4] fourth commit 1 file changed, 1 insertion(+)

master HEAD8810ac4

Agh! Son commit’e bir değişiklik eklemeyi unutmuşum. Son commit’i değiştireyim.“

Page 54: Git - Bildiğiniz Gibi Değil

d99108a

a4510bc

b2be58f

$ git commit --amend [master 1fa3409] third commit 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 readme.txt

1fa3409

Aynı ortak ata ile ilişkili 2. bir commit oluştu

master HEAD8810ac4

Page 55: Git - Bildiğiniz Gibi Değil

d99108a

a4510bc

b2be58f

1fa3409

master HEAD

8810ac4

bb43c12

$ git commit -m "fifth commit" [master bb43c12] fifth commit 1 file changed, 1 insertion(+)

Page 56: Git - Bildiğiniz Gibi Değil

Ayni Anda Farkli Görevleri Gerçekleştirme

Page 57: Git - Bildiğiniz Gibi Değil

master

HEAD

Page 58: Git - Bildiğiniz Gibi Değil

TAG/v1.1

$ git tag tag/v1.1

master

HEAD

Page 59: Git - Bildiğiniz Gibi Değil

TAG/v1.1

master

HEAD

$ git commit

Page 60: Git - Bildiğiniz Gibi Değil

$ git branch typofix

master

HEAD

typofixTAG/v1.1

Page 61: Git - Bildiğiniz Gibi Değil

$ git checkout typofix

master

typofixTAG/v1.1

HEAD

Page 62: Git - Bildiğiniz Gibi Değil

master

HEAD

typofix

TAG/v1.1

$ git commit

Page 63: Git - Bildiğiniz Gibi Değil

master

typofix

TAG/v1.1

$ git checkout master

HEAD

Page 64: Git - Bildiğiniz Gibi Değil

master

HEAD

TAG/v1.1

typofix

$ git commit

Page 65: Git - Bildiğiniz Gibi Değil

master

HEAD

TAG/v1.1

typofix

$ git merge typofix

Page 66: Git - Bildiğiniz Gibi Değil

master

HEAD

TAG/v1.1

$ git branch -d typofix

Page 67: Git - Bildiğiniz Gibi Değil

Kod Birleştirmenin Akillisi

Page 68: Git - Bildiğiniz Gibi Değil

master

HEAD

typofix

TAG/v1.1

Page 69: Git - Bildiğiniz Gibi Değil

master

HEAD

typofix

TAG/v1.1

$ git merge typofix

Page 70: Git - Bildiğiniz Gibi Değil

Başkalarinin Kodunu İle Entegrasyon

Page 71: Git - Bildiğiniz Gibi Değil

master

HEAD

TAG/v1.1

typofix

Page 72: Git - Bildiğiniz Gibi Değil

master

HEAD

TAG/v1.1 typofix

$ git rebase master

Page 73: Git - Bildiğiniz Gibi Değil

Kaybolmayan Kod Sorunsali :)

Page 74: Git - Bildiğiniz Gibi Değil

master

typofix

TAG/v1.1

login

HEAD

Page 75: Git - Bildiğiniz Gibi Değil

master

TAG/v1.1

login

HEAD

$ git branch -D typofix

Page 76: Git - Bildiğiniz Gibi Değil

master

typofix

TAG/v1.1

login

HEAD

$ git branch typofix a45f3c

Page 77: Git - Bildiğiniz Gibi Değil

Cimbizla Kod Tirtiklamak

Page 78: Git - Bildiğiniz Gibi Değil

master

HEAD

TAG/v1.1

typofix

Page 79: Git - Bildiğiniz Gibi Değil

master

HEAD

TAG/v1.1

typofix

$ git cherry-pick Green1 Green2

Page 80: Git - Bildiğiniz Gibi Değil

Hatalardan Geri Dönüş

Page 81: Git - Bildiğiniz Gibi Değil

master

HEAD

TAG/v1.1

typofix

Page 82: Git - Bildiğiniz Gibi Değil

master

HEAD

TAG/v1.1

typofix

$ git reset HEAD~2

Page 83: Git - Bildiğiniz Gibi Değil

Commit Graph

Page 84: Git - Bildiğiniz Gibi Değil

commit branch

checkout reset revert

cherry-pick tag

merge rebase stash fetch

Page 85: Git - Bildiğiniz Gibi Değil

LEMİ ORHAN ERGİNMaster Software Craftsman, ACM

/lemiorhan lemiorhanergin.com @lemiorhan