19
GIT Commit ve Push’dan Bir Adım Ötesi... İbrahim Gündüz Markafoni Brown Bag @ 2015

Git commit ve push’dan bir adım ötesi

Embed Size (px)

Citation preview

Page 1: Git commit ve push’dan bir adım ötesi

GITCommit ve Push’dan Bir Adım Ötesi...

İbrahim GündüzMarkafoni Brown Bag @ 2015

Page 2: Git commit ve push’dan bir adım ötesi

Ajanda● Temel Kavramlar

○ fetch○ merge○ rebase○ pull○ pull --rebase

● Neden Merge Değil Rebase ?● AB-1 vs origin/AB-1● Sapma (Diverge) Nedir ? Nasıl Olur ? Ne Yapmalı ?● Çakışma (Conflict) Nedir ? Nasıl Oluşur ? Ne Yapmalı ?● A Geliştiricisi İle B Geliştiricisinin AB-1 dalında Birlikte Çalışması● Lüzumsuz Commitler ve Rebase Zulmü Arasındaki İlişki● Sorular ?

Page 3: Git commit ve push’dan bir adım ötesi

GIT - Temel Kavramlar

git fetch

git merge

git rebase

git pull

git pull --rebase

Page 4: Git commit ve push’dan bir adım ötesi

GIT - git fetch

● Uzak uçtaki referansları transfer eder.● Kaynak kodu güncellemez.

Söz Dizimi:

git fetch <repository>

Örnek:

git fetch origin

Page 5: Git commit ve push’dan bir adım ötesi

GIT - git merge● Belirli bir GIT dalını, geçerli dalla birleştirir.● Yalnızca daha önce uzak uçtan aktarılmış referanslar veya yerel depodaki

dallarla birleştirme gerçekleştirilir.● Değişiklikler, tarihsel sıraya göre uygulanır.

Söz Dizimi:

git merge <ref>

Örnek:

$ git merge AB-1$ git merge origin/AB-1

Page 6: Git commit ve push’dan bir adım ötesi

GIT - git merge

Önce Sonra

Page 7: Git commit ve push’dan bir adım ötesi

GIT - git rebase● Belirli bir GIT dalını, geçerli dalla birleştirir.● Yalnızca daha önce uzak uçtan aktarılmış referansları birleştirir.● Değişiklikler, geçerli dalın ana daldan ayrıldığı noktadan itibaren

gerçekleştirilen geliştirmelerin birleştirme sonrasında en sona taşınması şeklinde uygulanır.

Söz Dizimi:

git rebase <base_ref>

Örnek:

$ git rebase master$ git rebase origin/master

Page 8: Git commit ve push’dan bir adım ötesi

GIT - git rebaseÖnce

Sonra

Page 9: Git commit ve push’dan bir adım ötesi

GIT - git pull● git pull == git fetch + git merge● Yalnızca parametre olarak belirtilen dal için senkronizasyon işlemi

gerçekleştirir.● Birleştirme işlemini kronolojik olarak gerçekleştirir.● Geçerli dal ile parametre olarak belirtilen dalı birleştirmez.

Söz Dizimi:

git pull <repository> <ref>

Örnek:

$ git pull origin ab-1

Page 10: Git commit ve push’dan bir adım ötesi

?

git pull --rebase

Page 11: Git commit ve push’dan bir adım ötesi

git pull --rebase=

git fetch + git rebase

Page 12: Git commit ve push’dan bir adım ötesi

GIT - Neden Merge Değil Rebase ?git merge git rebase

● Birleştirme yapılan dalda herhangibir zamanda oluşturulan commit lerin birleşen daldaki commitlerin arasına karışarak dalda sapma (Diverge) meydana gelmemesi

● Geliştirmelerin birbirinden keskin şekilde ayrılması● Hangi dalda hangi değişikliğin yapıldığının net olarak anlaşılması● Geri dönüş sırasında karşılaşılacak sorunların önüne geçmek.

Page 13: Git commit ve push’dan bir adım ötesi

GIT - AB-1 vs. origin/AB-1AB-1: GIT dalı.origin/AB-1: Referans.

origin/AB-1 Ne Zaman Kullanılabilir ?

Merge ve rebase öncesinde:

● Uzak Uç Log Kontrolü$ git log origin/AB-1

● Uzak Uç ile Yerel Ortam Karşılaştırması$ git diff AB-1 origin/AB-1

● Merge/Rebase İşlemlerinin Güvenli Olarak Gerçekleştirilmesi$ git rebase origin/master

● Referans belirterek dal çıkmak$ git checkout -b AB-2 -t origin/master

Page 14: Git commit ve push’dan bir adım ötesi

GIT - Sapma (Diverge) Nedir ? Nasıl Olur ? Ne Yapmalı ?Nedir ?Uzak uç ile yerel ortam arasındaki commit diziliminin belirli bir sıralama sonrasında araya giren farklı commitler nedeniyle bozulmasıdır.

Nasıl Olur ?

● İki veya daha fazla dalın bir dalda birleştirilmesiyle iki commit arasına giren yeni commitlerin uzak uçla yerel ortam arasında farklılık yaratması.

● Feature dalın rebase edilmesi.

Ne Yapmalı ?Uzak uçdaki dal git push --force ile ezilmeden önce;

● Birleştirilen dalların güncelliğinden emin olunmalı.

● rebase edilen dal ve taban dalın güncelliğinden emin olunmalı.

Page 15: Git commit ve push’dan bir adım ötesi

GIT - Çakışma (Conflict) Nedir ? Nasıl Oluşur ? Ne Yapmalı ?Nedir ?Aynı yerde yapılan değişikliklerin üst üste gelmesi durumudur.

Nasıl Oluşur ?Birleştirilen dallar aynı dosyanın farklı versiyonlarını içermesi durumunda

Ne Yapmalı ?

● Sürümde yeralması gereken değişikliğin hangisi olduğuna karar verilerek diğer version kaynak koddan kaldırılmalı.

● Conflictler çözüldükten sonra ilgili dosya git add ile staging e alınmalı.

● Conflict merge sırasında oluşmuşsa;

○ Tüm conflictler çözülmüşse yeni bir commit oluşturularak sürüme gönderilmeli.

○ git rebase --continue komutu çalıştırılarak

sonraki commitlerin dalla birleştirilmesi sağlanmalıdır.

Page 16: Git commit ve push’dan bir adım ötesi

GIT - A Geliştiricisi İle B Geliştiricisinin AB-1 dalında Birlikte Çalışması

● Birlikte çalışılan işlerde feature branch ler sıklıkla değişikliğe uğrar.

● Dallarda sapma (Diverge) meydana gelmemesi için en son yapılan değişiklikler dalın her zaman en sonunda tutulmalıdır.

● Doğru çalışılmış daldaki commit dizilimi düz bir çizgiyi şeklindedir, herhangibir sapma oluşmaz.

Ne Yapmalı ?

git pull --rebase origin AB-1

Ne Yapmamalı ?

git pull origin AB-1

Neden ?

● git pull, ucak uçtaki değişiklikleri kronolojik olarak yerel ortamdaki dalla birleştirir.

● Kronolojik olarak birleşen branch, zamana bağlı olarak araya giren farklı commitler nedeniyle uzak uçtan sapar.

Hatalı Feature Branch

Başarılı Feature Branch

Page 17: Git commit ve push’dan bir adım ötesi

● Geliştirme sonrasında oluşturulan hata veya stil düzeltme commit leri logun gereksiz uzamasına ve okuma güçlüğüne neden olur.

● Çok sayıda commit içeren dalların rebase edilmesi sırasında oluşan çakışmalar tekrar tekrar fix edilmek durumunda kalınabilir.

$ git rebase --continue$ git rebase --continue$ git rebase --continue…$ git rebase --continue

Ne Yapmalı ?Lüzumusz commitler Interactive rebase ile birleştirilmelidir.

$ git rebase -i HEAD~2

GIT - Lüzumsuz Commitler ve Rebase Zulmü Arasındaki İlişki

Gereksiz commitler (Son 2 Commit)

Interactive Rebase

Son iki commit birleştiriliyor

Başarılı Feature Branch

Page 18: Git commit ve push’dan bir adım ötesi

Sorular?

Page 19: Git commit ve push’dan bir adım ötesi

Teşekkürler