GitHub Pull Request Nedir? Kod İnceleme ve Takım Çalışması Rehberi

GitHub Pull Request nedir, nasıl oluşturulur ve birleştirilir? Bu uygulamalı rehberde feature branch üzerinden Pull Request açmayı, kod incelemeyi, reviewer eklemeyi, değişiklik taleplerini yönetmeyi ve GitHub'da profesyonel takım çalışması yapmayı öğrenin.

GitHub Pull Request Nedir? Kod İnceleme ve Takım Çalışması

Modern yazılım geliştirme süreçlerinde projeler genellikle birden fazla geliştirici tarafından hazırlanır. Bir geliştirici yeni özellikler eklerken başka bir geliştirici hataları düzeltebilir veya mevcut kodları iyileştirebilir.

Peki farklı geliştiricilerin hazırladığı kodlar ana projeye nasıl güvenli ve kontrollü şekilde dahil edilir?

GitHub, bu süreci yönetebilmek için Pull Request adı verilen bir iş birliği sistemi sunar.

Pull Request, bir geliştiricinin yaptığı değişiklikleri ana geliştirme hattına dahil etmeyi önermesini, değişikliklerin incelenmesini ve uygun koşullarda birleştirilmesini sağlar.

Bu rehberde GitHub Pull Request oluşturmayı, reviewer eklemeyi, kod incelemeyi, değişiklik taleplerini yönetmeyi ve Pull Request üzerinden merge işlemi gerçekleştirmeyi uygulamalı olarak öğreneceksiniz.

1. GitHub Pull Request Nedir?

Pull Request (PR), GitHub üzerinde bir branch'te yapılan değişikliklerin başka bir branch'e dahil edilmesini önermek için oluşturulan geliştirme isteğidir.

Pull Request sayesinde geliştiriciler hazırladıkları kodları doğrudan ana branch'e göndermek yerine önce incelemeye sunabilir.

Örneğin bir web uygulaması geliştirdiğinizi düşünelim.

Projenizde aşağıdaki branch'ler bulunuyor:

main
feature/login
feature/payment
fix/navbar

Yeni kullanıcı giriş sistemi feature/login branch'inde geliştirilmiş olsun.

Bu özellik tamamlandığında geliştirici, feature/login branch'indeki değişikliklerin main branch'ine dahil edilmesi için Pull Request oluşturabilir.

Bu işlem sırasında ekip üyeleri kodları inceleyebilir, yorum yazabilir, değişiklik isteyebilir veya uygun koşullarda onay verebilir.

Gerekli kontroller tamamlandıktan sonra değişiklikler main branch'ine birleştirilebilir.

2. Pull Request Neden Kullanılır?

Pull Request sisteminin amacı yalnızca kodları birleştirmek değildir.

Bu sistem, yazılım geliştirme sürecini daha düzenli, izlenebilir ve kontrollü hale getirmeye yardımcı olur.

Kod Kalitesini Artırmak

Bir geliştiricinin hazırladığı kodlar başka geliştiriciler tarafından incelenebilir.

Bu incelemeler sırasında olası hatalar, gereksiz tekrarlar veya anlaşılması zor kod bölümleri tespit edilebilir.

Takım Çalışmasını Kolaylaştırmak

Farklı geliştiriciler aynı proje üzerinde bağımsız branch'lerde çalışabilir.

Pull Request sayesinde bu çalışmalar ortak geliştirme hattına kontrollü biçimde dahil edilebilir.

Değişiklikleri Belgelemek

Pull Request içerisinde değişikliklerin amacı, kullanılan yöntemler, test sonuçları ve yapılan değerlendirmeler kaydedilebilir.

Böylece ilerleyen dönemlerde belirli bir özelliğin neden ve nasıl geliştirildiği daha kolay anlaşılabilir.

Otomatik Testleri Kullanmak

GitHub Actions veya farklı CI sistemleri, Pull Request oluşturulduğunda kod üzerinde otomatik kontroller çalıştırabilir.

Örneğin kod analizi, birim testleri ve derleme kontrolleri gerçekleştirilebilir.

Ancak bu testlerin çalışması için repository içerisinde uygun otomasyonların yapılandırılmış olması gerekir.

Ana Branch'i Korumak

Branch protection veya ruleset kuralları sayesinde önemli branch'lere yapılacak değişiklikler belirli koşullara bağlanabilir.

Örneğin bir Pull Request'in birleştirilmeden önce onaylanması veya belirli testlerden geçmesi zorunlu hale getirilebilir.

3. Git Pull ve GitHub Pull Request Arasındaki Fark

Git öğrenenlerin sık karıştırdığı konulardan biri git pull komutu ile Pull Request kavramıdır.

İsimleri birbirine benzese de bu işlemler aynı değildir.

Özellik Git Pull Pull Request
Tanım Git komutu GitHub iş birliği özelliği
Temel amaç Uzak değişiklikleri almak ve entegre etmek Kod değişikliklerini incelemeye ve birleştirmeye sunmak
Kullanım Terminal üzerinden GitHub arayüzü, CLI veya API üzerinden
Kod inceleme Doğrudan bir inceleme süreci oluşturmaz Yorum ve değerlendirme imkânı sunar
Takım çalışması Yerel kodu güncellemekte kullanılır Değişiklik önerilerini yönetmekte kullanılır

Kısaca: git pull uzak repository'deki değişiklikleri yerel projeye almak için kullanılır. Pull Request ise yapılan değişikliklerin başka bir branch'e dahil edilmesini önermek ve inceleme sürecini yönetmek için kullanılır.

4. Pull Request Nasıl Çalışır?

Pull Request sürecini anlamak için basit bir geliştirme senaryosu inceleyelim.

Örneğin projemizin ana branch'i main olsun.

main
 |
 A --- B --- C

Yeni bir kullanıcı giriş ekranı geliştirmek için feature/login branch'i oluşturalım.

          D --- E   feature/login
         /
A --- B --- C       main

Bu örnekte D ve E commit kayıtları feature/login üzerinde geliştirdiğimiz yeni özelliği temsil ediyor.

Değişiklikleri ana projeye dahil etmek için feature/login branch'inden main branch'ine Pull Request oluşturabiliriz.

Pull Request açıldığında GitHub, iki branch arasındaki değişiklikleri karşılaştırır.

Geliştiriciler bu değişiklikleri inceleyerek uygun olup olmadıklarını değerlendirebilir.

Pull Request kabul edilip birleştirildiğinde yeni özellik main branch'ine dahil edilir.

5. Base Branch ve Compare Branch Nedir?

Pull Request oluştururken iki önemli kavramla karşılaşırız:

  • Base Branch: Değişikliklerin dahil edilmesini istediğimiz hedef branch'tir.
  • Compare Branch: Değişiklikleri hazırladığımız kaynak branch'tir.

Örneğin:

base: main

compare: feature/login

Bu yapı, feature/login branch'indeki değişikliklerin main branch'ine dahil edilmesini önerdiğimiz anlamına gelir.

Pull Request oluştururken base ve compare branch'lerini doğru seçmek önemlidir.

Yanlış branch seçmek, istemediğiniz değişiklikleri incelemeye sunmanıza neden olabilir.

6. Uygulama: İlk Pull Request Projemizi Hazırlayalım

Şimdi gerçek bir Pull Request oluşturmak için örnek bir geliştirme gerçekleştireceğiz.

Bu uygulamada önceki bölümlerde hazırladığımız ilk-git-projem repository'sini kullanacağız.

Amacımız projeye örnek bir kullanıcı giriş sayfası eklemek ve bu özelliği Pull Request üzerinden main branch'ine dahil etmek.

Örneğimizde kullanılan giriş ekranı yalnızca HTML arayüzünü gösterecektir. Gerçek kullanıcı doğrulaması veya oturum yönetimi gerçekleştirmeyecektir.

Adım 1: Proje Klasörünü Açın

Terminalinizi açın ve proje klasörünüze geçin.

cd ilk-git-projem

Ardından projenin mevcut durumunu kontrol edin.

git status

Yeni geliştirmeye başlamadan önce kaydedilmemiş değişiklikler bulunmadığından emin olun.

Aktif branch'i kontrol etmek için:

git branch --show-current

Komutunu çalıştırabilirsiniz.

Adım 2: Main Branch'e Geçin

Yeni özelliği güncel ana geliştirme hattından başlatmak için main branch'ine geçelim.

git switch main

Ardından uzak depodaki güncellemeleri alalım:

git pull --ff-only

Bu komutun beklenen şekilde çalışması için main branch'inin uygun upstream bağlantısına sahip olması gerekir.

Yerel ve uzak geçmişler ayrılmışsa fast-forward işlemi reddedilebilir. Böyle bir durumda yeni branch oluşturmadan önce geçmişleri incelemek gerekir.

Adım 3: Yeni Feature Branch Oluşturun

Şimdi kullanıcı giriş ekranı için ayrı branch oluşturalım.

git switch -c feature/login-form

Bu komut feature/login-form isminde yeni bir branch oluşturur ve aktif branch'i değiştirir.

Kontrol edelim:

git branch

Örnek çıktı:

  main
* feature/login-form

Artık yeni özelliği main branch'inden bağımsız olarak geliştirebiliriz.

7. Feature Branch Üzerinde Kod Geliştirme

Proje klasörümüz içerisinde login.html isimli yeni bir dosya oluşturacağız.

Bu dosya örnek bir kullanıcı giriş ekranı içerecek.

login.html dosyasına aşağıdaki kodu ekleyin:

<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, initial-scale=1.0">
    <title>Kullanıcı Girişi - Nizokka Akademi</title>
</head>
<body>

    <h1>Kullanıcı Girişi</h1>

    <form>
        <label for="email">E-posta</label>
        <input
            type="email"
            id="email"
            name="email"
            required
        >

        <label for="password">Şifre</label>
        <input
            type="password"
            id="password"
            name="password"
            required
        >

        <button type="button">
            Giriş Yap
        </button>
    </form>

    <p>Bu sayfa eğitim amaçlı bir arayüz örneğidir.</p>

</body>
</html>

Bu HTML kodu temel bir giriş arayüzü oluşturur.

Ancak gerçek bir kimlik doğrulama sistemi içermez. Buton yalnızca görsel örnek olarak hazırlanmıştır.

Gerçek bir giriş sistemi geliştirmek için sunucu tarafında kimlik doğrulama, güvenli oturum yönetimi, parola güvenliği ve uygun erişim kontrolleri gerekir.

Dosyayı kaydettikten sonra terminale dönelim.

8. Değişiklikleri Git Commit ile Kaydetme

İlk olarak Git'in mevcut durumunu inceleyelim:

git status

Git, yeni oluşturduğumuz login.html dosyasını henüz takip edilmeyen dosya olarak gösterecektir.

Dosyayı staging alanına eklemek için:

git add login.html

Ardından:

git diff --staged

Komutuyla kaydedilecek değişiklikleri inceleyebilirsiniz.

Her şey doğruysa commit oluşturalım:

git commit -m "feat: kullanıcı giriş ekranı eklendi"

Bu komut login.html dosyasını yerel Git geçmişine kaydeder.

Artık feature/login-form branch'imizde yeni bir commit bulunmaktadır.

9. Feature Branch'i GitHub'a Gönderme

Pull Request oluşturabilmek için hazırladığımız branch'in GitHub üzerinde erişilebilir olması gerekir.

Bu nedenle yerel branch'imizi uzak repository'ye göndereceğiz.

Terminalde aşağıdaki komutu çalıştırın:

git push -u origin feature/login-form

Komutun parçaları:

  • git push: Yerel commit kayıtlarını uzak depoya gönderir.
  • -u: Branch için upstream bağlantısını yapılandırır.
  • origin: Uzak repository'nin ismidir.
  • feature/login-form: Gönderilecek branch'tir.

Komut başarılı olduğunda GitHub repository'nizde feature/login-form branch'i oluşturulur.

Artık Pull Request açmaya hazırız.

10. GitHub Pull Request Nasıl Oluşturulur?

Şimdi GitHub arayüzü üzerinden ilk Pull Request'imizi oluşturacağız.

Adım 1: GitHub Repository Sayfasını Açın

İnternet tarayıcınızdan GitHub hesabınıza giriş yapın.

Ardından ilk-git-projem repository'sinin sayfasını açın.

Adım 2: Pull Requests Bölümüne Girin

Repository sayfasının üst kısmındaki Pull requests sekmesini açın.

Yeni Pull Request oluşturmak için New pull request seçeneğini kullanabilirsiniz.

Alternatif olarak yeni branch gönderdiğinizde GitHub arayüzünde görüntülenebilen Compare & pull request butonundan yararlanabilirsiniz.

Adım 3: Branch'leri Seçin

Pull Request oluşturma ekranında base ve compare alanlarını kontrol edin.

base: main

compare: feature/login-form

Bu seçimle feature/login-form branch'indeki değişikliklerin main branch'ine dahil edilmesini öneriyoruz.

Adım 4: Değişiklikleri Kontrol Edin

GitHub, iki branch arasındaki dosya değişikliklerini karşılaştırır.

Bu ekranda eklenen, silinen ve değiştirilen satırları inceleyebilirsiniz.

Örneğimizde login.html dosyasının yeni bir dosya olarak eklendiğini göreceksiniz.

Adım 5: Pull Request Başlığı Yazın

Pull Request için açıklayıcı bir başlık seçin.

Örneğin:

feat: Kullanıcı giriş ekranı eklendi

Başlığın yapılan geliştirmeyi açık biçimde anlatması önemlidir.

Adım 6: Pull Request Açıklaması Hazırlayın

Pull Request açıklamasında hangi değişikliklerin yapıldığını ve bu değişikliklerin nasıl kontrol edildiğini belirtmek faydalıdır.

Örneğin GitHub açıklama alanına şu Markdown metnini yazabilirsiniz:

## Açıklama

Bu Pull Request, örnek kullanıcı giriş
ekranını projeye ekler.

## Yapılan Değişiklikler

- login.html dosyası oluşturuldu.
- E-posta alanı eklendi.
- Şifre alanı eklendi.
- Giriş butonu eklendi.

## Testler

- HTML dosyası tarayıcıda açıldı.
- Form alanlarının görüntüsü kontrol edildi.
- Gerçek kimlik doğrulama uygulanmadı.

## Notlar

Bu değişiklik yalnızca eğitim amaçlı
giriş ekranı arayüzünü kapsamaktadır.

Buradaki test maddelerini yalnızca ilgili kontrolleri gerçekten gerçekleştirdiyseniz tamamlandı olarak belirtin.

Pull Request açıklamasının amacı, inceleme yapacak geliştiricilere doğru ve yeterli bilgi sunmaktır.

Adım 7: Pull Request Oluşturun

Başlık ve açıklamayı tamamladıktan sonra Create pull request butonuna tıklayın.

GitHub yeni Pull Request'inizi oluşturacaktır.

Pull Request'inize repository içerisinde bir numara atanır.

Örneğin:

Pull Request #12

Bu numara yalnızca örnektir. Gerçek Pull Request numaranız farklı olacaktır.

Tebrikler! İlk GitHub Pull Request'inizi oluşturdunuz.

11. Draft Pull Request Nedir?

Bazen geliştirdiğiniz özellik henüz tamamlanmamış olabilir.

Ancak çalışmalarınızı ekip arkadaşlarınızla paylaşmak ve erken geri bildirim almak isteyebilirsiniz.

Bu durumda Draft Pull Request kullanılabilir.

Draft Pull Request, geliştirme sürecinin devam ettiğini ve değişikliklerin henüz normal birleştirme akışına hazır olmadığını belirtmek için kullanılır.

Pull Request oluştururken uygun arayüz seçeneğinden Create draft pull request tercih edilebilir.

Geliştirme tamamlandığında Pull Request hazır hale getirilebilir.

Bunun için GitHub üzerinde Ready for review seçeneği kullanılabilir.

Draft Pull Request özellikle erken geri bildirim almak isteyen geliştiriciler için faydalıdır.

12. GitHub Reviewer Nedir?

Reviewer, bir Pull Request içerisinde yapılan değişiklikleri incelemesi istenen kişidir.

Reviewer, kodun doğruluğunu, okunabilirliğini, güvenliğini ve proje standartlarına uygunluğunu değerlendirebilir.

Bir Pull Request için inceleme talep etmek amacıyla GitHub arayüzündeki Reviewers alanı kullanılabilir.

Buradan uygun erişim ve repository koşulları kapsamında geliştiriciler veya ekipler seçilebilir.

Örneğin:

  • Frontend geliştiricisi HTML ve CSS değişikliklerini inceleyebilir.
  • Backend geliştiricisi API ve veritabanı kodlarını değerlendirebilir.
  • Güvenlik sorumlusu kimlik doğrulama değişikliklerini kontrol edebilir.
  • Proje yöneticisi geliştirme kapsamını değerlendirebilir.

Reviewer eklenmesi, Pull Request'in otomatik olarak onaylandığı anlamına gelmez.

İnceleme yapılması ve uygun değerlendirme sonucunun gönderilmesi gerekir.

13. GitHub Code Review Nedir?

Code Review, bir geliştiricinin hazırladığı kod değişikliklerinin başka bir geliştirici tarafından incelenmesi sürecidir.

Kod inceleme yalnızca hata bulmaya odaklanmaz.

İyi bir Code Review sürecinde kodun anlaşılır olması, bakım kolaylığı, güvenlik, test edilebilirlik ve proje standartları da değerlendirilir.

GitHub üzerinde Pull Request sayfasındaki Files changed sekmesi bu amaçla kullanılır.

Bu bölümde Pull Request tarafından eklenen, silinen veya değiştirilen kod satırları görüntülenebilir.

Eklenen ve Silinen Satırlar

GitHub kod farklarını görüntülerken eklenen satırları genellikle yeşil, silinen satırları ise kırmızı renkle belirtir.

Örneğin:

- <h1>Eski Başlık</h1>
+ <h1>Yeni Başlık</h1>

Bu gösterimde eksi işareti kaldırılan satırı, artı işareti ise eklenen satırı ifade eder.

Reviewer bu değişiklikleri inceleyerek geri bildirim verebilir.

14. Pull Request Üzerinde Yorum Nasıl Yapılır?

GitHub, kodun belirli satırlarına doğrudan yorum ekleme imkânı sunar.

Bunun için Pull Request sayfasındaki Files changed bölümünü açın.

Yorum yapmak istediğiniz satırın yanındaki yorum simgesini kullanın.

Ardından açıklamanızı yazın.

Örneğin bir form alanını inceleyen reviewer aşağıdaki yorumu ekleyebilir:

Şifre alanının autocomplete özelliğini
uygun şekilde tanımlayabilir miyiz?

Bu, kullanıcı deneyimini iyileştirebilir.

Bu yorum, geliştiricinin belirli bir kod bölümünü yeniden değerlendirmesini sağlar.

GitHub üzerinde tek bir yorum bırakılabileceği gibi birden fazla yorum bir inceleme kapsamında toplanabilir.

15. Approve, Comment ve Request Changes Nedir?

GitHub Pull Request inceleme sürecinde üç önemli değerlendirme türü bulunur.

Comment

Reviewer kod hakkında yorum veya öneri bırakabilir.

Bu işlem kendi başına Pull Request'in onaylandığı veya reddedildiği anlamına gelmez.

Approve

Approve, reviewer tarafından yapılan değişikliklerin onaylandığını belirtir.

Repository ayarlarına bağlı olarak bir veya daha fazla yetkili reviewer onayı gerekli olabilir.

Ancak yalnızca onay verilmesi, bütün birleştirme şartlarının tamamlandığı anlamına gelmez.

Örneğin zorunlu otomatik testlerin de başarılı olması gerekebilir.

Request Changes

Request Changes, reviewer tarafından değişiklik yapılmasının istendiğini belirtir.

Bu değerlendirme, repository kurallarına ve reviewer yetkilerine bağlı olarak Pull Request'in birleştirilmesini engelleyebilir.

Geliştirici gerekli düzeltmeleri hazırladıktan sonra yeniden inceleme talep edebilir.

Değerlendirme Anlamı
Comment Yorum veya öneri bildirimi
Approve Kod değişikliklerinin onaylanması
Request Changes Değişiklik yapılmasının istenmesi

16. Reviewer Değişiklik İsterse Ne Yapılır?

Bir Pull Request üzerinde reviewer değişiklik yapılmasını isteyebilir.

Bu durumda yeni Pull Request oluşturmanız gerekmez.

Mevcut feature branch'inizi güncelleyerek değişiklikleri aynı Pull Request'e ekleyebilirsiniz.

Örneğimizde reviewer, giriş formunun daha açıklayıcı hale getirilmesini istemiş olsun.

Öncelikle terminalde ilgili branch'e geçelim:

git switch feature/login-form

Ardından login.html dosyasını açarak gerekli düzenlemeleri gerçekleştirelim.

Örneğin şifre alanına uygun autocomplete niteliği ekleyebiliriz:

<input
    type="password"
    id="password"
    name="password"
    autocomplete="current-password"
    required
>

Bu örnek mevcut bir kullanıcı hesabıyla giriş yapılması durumuna uygun autocomplete değerini gösterir.

Dosyayı kaydettikten sonra:

git add login.html

git commit -m "fix: giriş formu alanları iyileştirildi"

git push

Komutlarını çalıştırın.

Bu örnekte branch'in upstream bağlantısının daha önce yapılandırıldığını varsayıyoruz.

Push işlemi başarılı olduğunda GitHub, açık Pull Request'in kaynak branch'indeki yeni commit'leri görüntüler.

Böylece reviewer güncellenen kodu yeniden inceleyebilir.

17. Review Yorumlarına Nasıl Cevap Verilir?

Pull Request inceleme sürecinde yorumlara açık ve anlaşılır cevaplar vermek önemlidir.

Örneğin reviewer bir değişiklik önerdiğinde aşağıdaki gibi cevap verebilirsiniz:

Öneriniz için teşekkürler.

Form alanlarını güncelledim ve
değişiklikleri yeni commit ile gönderdim.

Tekrar inceleyebilirsiniz.

Yapılan değişiklik ilgili sorunu çözdüyse konuşma uygun yetkiler kapsamında çözümlenmiş olarak işaretlenebilir.

GitHub üzerinde bu amaçla Resolve conversation seçeneği bulunabilir.

Ancak bir yorumu çözümlenmiş olarak işaretlemek, kodun otomatik olarak onaylandığı anlamına gelmez.

Repository kuralları gerektiriyorsa reviewer tarafından yeniden onay verilmesi gerekebilir.

18. GitHub Checks Nedir?

Pull Request oluşturulduğunda GitHub üzerinde Checks adı verilen otomatik kontrol sonuçları görüntülenebilir.

Bu kontroller GitHub Actions veya diğer entegre otomasyon sistemleri tarafından oluşturulabilir.

Örneğin:

  • JavaScript testlerinin çalıştırılması
  • PHP kod analizinin gerçekleştirilmesi
  • Python birim testlerinin yürütülmesi
  • Flutter analiz ve test işlemleri
  • Uygulama derleme kontrolü
  • Kod biçimlendirme kontrolü

Bu işlemler CI yani Continuous Integration süreçlerinin bir parçası olabilir.

CI Nedir?

Continuous Integration (Sürekli Entegrasyon), geliştiricilerin kod değişikliklerini ortak projeye dahil ederken otomatik kontrol ve test süreçlerinden yararlanmasını sağlayan geliştirme yaklaşımıdır.

Örneğin bir Flutter projesinde aşağıdaki komutlar otomatik test iş akışında kullanılabilir:

flutter analyze

flutter test

Bu komutların GitHub üzerinde otomatik çalışabilmesi için uygun bir GitHub Actions workflow dosyası hazırlanmalıdır.

Yalnızca Pull Request oluşturmak, bu testlerin otomatik olarak çalışacağını garanti etmez.

Checks Başarısız Olursa Ne Yapılır?

Bir otomatik test başarısız olduğunda önce ilgili kontrolün hata kayıtlarını inceleyin.

Hatanın nedenini belirleyerek gerekli düzeltmeyi feature branch üzerinde gerçekleştirin.

Ardından değişiklikleri commit edip GitHub'a gönderin.

Yeni commit'ler, otomasyon yapılandırmasına bağlı olarak kontrollerin yeniden çalışmasını sağlayabilir.

Korunan branch'lerde zorunlu testlerin başarılı olması, birleştirme işleminin koşullarından biri olabilir.

19. GitHub Branch Protection Nedir?

Profesyonel yazılım projelerinde main gibi önemli branch'lerin korunması gerekebilir.

GitHub, bu amaçla branch protection kuralları ve repository rulesets gibi mekanizmalar sunar.

Bu mekanizmalar sayesinde belirli branch'ler için geliştirme ve birleştirme kuralları tanımlanabilir.

Örneğin:

  • Pull Request incelemesi zorunlu tutulabilir.
  • Belirli sayıda onay istenebilir.
  • Otomatik testlerin başarılı olması şart koşulabilir.
  • Kod sahiplerinin inceleme yapması gerekebilir.
  • Çözülmemiş konuşmaların tamamlanması istenebilir.
  • Force push veya branch silme işlemleri sınırlandırılabilir.

Bu kuralların kullanılabilirliği ve ayrıntıları GitHub planına, repository türüne ve yapılandırmaya bağlıdır.

Branch protection, ana geliştirme hattının kontrolsüz değişikliklerden korunmasına yardımcı olur.

20. CODEOWNERS Nedir?

GitHub üzerinde kullanılan önemli dosyalardan biri CODEOWNERS dosyasıdır.

Bu dosya, repository içerisindeki belirli dosya veya klasörlerden hangi kullanıcıların ya da ekiplerin sorumlu olduğunu tanımlamak için kullanılabilir.

Örneğin:

# Frontend dosyaları
/frontend/ @frontend-team

# Backend dosyaları
/backend/ @backend-team

# PHP dosyaları
*.php @php-developer

Bu örnekteki kullanıcı ve ekip isimleri yalnızca gösterim amaçlıdır. Gerçek CODEOWNERS dosyasında GitHub tarafından tanınan ve gerekli erişim koşullarını sağlayan kullanıcı veya ekip isimleri kullanılmalıdır.

CODEOWNERS dosyası genellikle repository kökünde, docs klasöründe veya .github klasöründe bulunabilir.

GitHub, uygun yapılandırmalarda ilgili dosyalar değiştirildiğinde kod sahiplerinden otomatik inceleme isteyebilir.

Branch protection veya ruleset kurallarıyla birlikte kullanıldığında kod sahiplerinin onayları zorunlu hale getirilebilir.

21. GitHub Pull Request Nasıl Merge Edilir?

Pull Request incelemeleri tamamlandığında ve gerekli koşullar sağlandığında değişiklikler hedef branch'e birleştirilebilir.

Bunun için Pull Request sayfasındaki uygun merge seçeneği kullanılır.

GitHub farklı birleştirme yöntemleri sunabilir.

Merge Pull Request

Bu yöntem değişiklikleri bir merge commit oluşturarak hedef branch'e dahil edebilir.

Farklı geliştirme hatlarının geçmişi korunabilir.

Squash and Merge

Bu yöntem Pull Request içerisindeki değişiklikleri hedef branch üzerinde tek bir commit olarak kaydetmek için kullanılır.

Özellikle feature branch üzerinde çok sayıda küçük commit oluşturulduysa faydalı olabilir.

Rebase and Merge

Bu yöntem Pull Request commit'lerini hedef branch'in geçmişi üzerinde yeniden uygulayarak doğrusal bir commit geçmişi oluşturabilir.

Yeniden uygulanan commit'lerin kimlikleri değişebilir.

Yöntem Temel Özellik
Merge pull request Geliştirme geçmişlerini merge commit ile birleştirebilir.
Squash and merge Pull Request değişikliklerini tek commit halinde birleştirir.
Rebase and merge Commit'leri hedef geçmiş üzerinde yeniden uygular.

Hangi seçeneklerin kullanılabileceği repository ayarlarına bağlıdır.

Özellikle merge öncesinde kod incelemelerinin, testlerin ve gerekli onayların tamamlandığından emin olun.

22. Pull Request Merge Edildikten Sonra Ne Yapılır?

Bir Pull Request başarıyla birleştirildikten sonra kaynak branch'e artık ihtiyaç duyulmayabilir.

Bu durumda GitHub arayüzü üzerinden Delete branch seçeneği kullanılabilir.

Ancak branch'in gerçekten tamamlandığından ve başka bir geliştirme sürecinde kullanılmadığından emin olun.

Yerel Main Branch'i Güncelleme

Pull Request GitHub üzerinde birleştirildikten sonra bilgisayarımızdaki main branch eski durumda kalabilir.

Yerel main branch'i güncellemek için:

git switch main

git pull --ff-only origin main

Komutlarını kullanabilirsiniz.

Bu örnekte yerel main branch geçmişinin uzak main ile fast-forward güncellemeye uygun olduğunu varsayıyoruz.

Yerel Feature Branch'i Silme

Artık kullanılmayan feature branch'i silmek için:

git branch -d feature/login-form

Komutu kullanılabilir.

Ancak squash veya rebase yöntemiyle birleştirilen branch'lerde Git, özgün commit'leri doğrudan main geçmişinde bulamadığından güvenli silme işlemini reddedebilir.

Bu durumda branch'in gerçekten tamamlandığını, değişikliklerinin korunduğunu ve başka bir işlemde kullanılmadığını doğrulamadan zorla silme yapmayın.

23. GitHub Fork Nedir?

GitHub üzerinde başka geliştiricilere ait açık kaynak projelere katkıda bulunmak isteyebilirsiniz.

Ancak her repository'ye doğrudan kod gönderme yetkiniz bulunmayabilir.

GitHub bu durumda fork adı verilen bir mekanizma sunar.

Fork, bir repository'nin GitHub üzerinde farklı bir kullanıcı veya kuruluş hesabı altında oluşturulan kopyasıdır.

Bu yöntem sayesinde ana repository'ye doğrudan yazma izniniz olmasa bile kendi kopyanız üzerinde geliştirme yapabilirsiniz.

Fork ile Pull Request Süreci

Örneğin GitHub üzerinde açık kaynak bir Python projesine katkıda bulunmak istiyorsunuz.

Genel çalışma akışı şu şekilde olabilir:

  • Orijinal repository'yi fork edin.
  • Fork repository'nizi bilgisayarınıza klonlayın.
  • Yeni bir feature branch oluşturun.
  • Gerekli kod değişikliklerini hazırlayın.
  • Değişiklikleri fork repository'nize gönderin.
  • Orijinal repository'ye Pull Request oluşturun.

Fork üzerinden oluşturulan Pull Request'te base branch genellikle orijinal repository'deki hedef branch'tir.

Compare branch ise fork repository'nizde geliştirdiğiniz branch'tir.

Bu süreç açık kaynak yazılım geliştirme çalışmalarında oldukça yaygındır.

24. Pull Request ile GitHub Issue Nasıl Bağlanır?

GitHub Issues, projelerdeki görevleri, hataları ve geliştirme önerilerini takip etmek için kullanılabilir.

Bir Pull Request belirli bir Issue'yu çözmek amacıyla hazırlanmış olabilir.

Örneğin:

Issue #42

Kullanıcı giriş ekranı oluşturulmalı.

Bu görevi tamamlamak için Pull Request oluşturduğumuzu düşünelim.

Pull Request açıklamasına aşağıdaki ifade eklenebilir:

Closes #42

GitHub, uygun koşullar altında bu ifadeyi ilgili Issue ile ilişkilendirebilir ve Pull Request varsayılan branch'e birleştirildiğinde Issue'yu otomatik kapatabilir.

Benzer biçimde Fixes veya Resolves gibi desteklenen anahtar kelimeler kullanılabilir.

Ancak Issue bağlantılarının ve otomatik kapatma davranışının repository ilişkilerine, hedef branch'e ve GitHub kurallarına bağlı olduğunu unutmayın.

Bu özellik görev yönetimi ile kod değişiklikleri arasındaki ilişkiyi takip etmeyi kolaylaştırır.

25. GitHub CLI ile Pull Request Oluşturma

GitHub üzerinde Pull Request oluşturmak için her zaman tarayıcı kullanmanız gerekmez.

GitHub CLI, GitHub işlemlerini terminal üzerinden gerçekleştirmek için hazırlanmış resmi komut satırı aracıdır.

GitHub CLI komutları genellikle gh ile başlar.

Bu aracın bilgisayarınızda kurulu ve uygun şekilde yetkilendirilmiş olması gerekir.

GitHub CLI ile Giriş Yapma

Kimlik doğrulaması için:

gh auth login

Komutu kullanılabilir.

Ardından ekrandaki yönergeleri takip ederek GitHub hesabınızla bağlantı kurabilirsiniz.

Pull Request Oluşturma

Mevcut branch'iniz uygun uzak repository'ye gönderilmişse:

gh pr create

Komutunu çalıştırabilirsiniz.

GitHub CLI, Pull Request başlığı ve açıklaması gibi bilgileri girmeniz için sizi yönlendirebilir.

Belirli Branch'ler Arasında PR Oluşturma

gh pr create --base main --head feature/login-form

Bu komut feature/login-form branch'inden main branch'ine Pull Request oluşturma sürecini başlatır.

Pull Request Listesini Görüntüleme

gh pr list

Bu komut mevcut repository için ilgili Pull Request listesini görüntüler.

Pull Request Durumunu Kontrol Etme

gh pr status

Bu komut GitHub hesabınızla ilişkili Pull Request durumlarını incelemenize yardımcı olur.

Pull Request Kontrollerini Görüntüleme

gh pr checks

Bu komut uygun Pull Request için otomatik kontrol sonuçlarını gösterir.

Pull Request Merge Etme

Gerekli izinler ve repository kuralları sağlanıyorsa:

gh pr merge

Komutu kullanılabilir.

GitHub CLI, uygun Pull Request'in birleştirilmesi için etkileşimli seçenekler sunabilir.

Bu komutları kullanmadan önce bulunduğunuz repository'yi ve işlem yapılacak Pull Request'i kontrol edin.

26. Pull Request Template Nedir?

Profesyonel projelerde Pull Request açıklamalarının belirli bir düzen içerisinde hazırlanması istenebilir.

Bu amaçla Pull Request template dosyaları kullanılabilir.

Örneğin repository içerisinde aşağıdaki dosya oluşturulabilir:

.github/pull_request_template.md

Bu dosyada geliştiricilerden istenecek bilgiler tanımlanabilir.

Örnek Markdown şablonu:

## Açıklama

Yapılan değişiklikleri açıklayın.

## Değişiklik Türü

- [ ] Yeni özellik
- [ ] Hata düzeltmesi
- [ ] Dokümantasyon
- [ ] Kod iyileştirme

## Testler

- [ ] Kod kontrol edildi
- [ ] İlgili testler çalıştırıldı
- [ ] Sonuçlar doğrulandı

## İlgili Issue

Issue numarasını belirtin.

## Ek Notlar

Gerekli açıklamaları ekleyin.

Bu şablon sayesinde Pull Request oluşturan geliştiriciler daha tutarlı açıklamalar hazırlayabilir.

Ancak kontrol kutularının işaretlenmesi, ilgili işlemlerin gerçekten gerçekleştirildiğinin yerine geçmez.

27. Profesyonel Pull Request Nasıl Hazırlanır?

Kaliteli bir Pull Request hazırlamak için bazı geliştirme alışkanlıklarını benimsemek faydalıdır.

Küçük ve Anlaşılır Değişiklikler Hazırlayın

Bir Pull Request içerisinde çok sayıda birbirinden bağımsız özellik geliştirmek kod incelemeyi zorlaştırabilir.

Mümkün olduğunda tek bir mantıksal değişikliğe odaklanın.

Açıklayıcı Başlık Kullanın

Pull Request başlığı değişikliğin amacını anlatmalıdır.

Örneğin:

feat: Kullanıcı profil sayfası eklendi

Bu başlık genel bir "güncelleme" ifadesinden daha açıklayıcıdır.

Test Sonuçlarını Paylaşın

Gerçekleştirdiğiniz testleri ve varsa başarısız kontrolleri Pull Request açıklamasında belirtin.

Test edilmemiş bir özelliği test edilmiş gibi göstermeyin.

Gereksiz Dosyaları Eklemeyin

Pull Request içerisinde yalnızca ilgili değişikliklerin bulunması kod incelemeyi kolaylaştırır.

Bağımlılık klasörleri, geçici dosyalar veya gizli yapılandırmaları yanlışlıkla eklememeye dikkat edin.

Reviewer Yorumlarını Değerlendirin

Kod inceleme süreci geliştiriciler arasında bilgi paylaşımını destekler.

Yorumları dikkatlice okuyun, gerekli düzeltmeleri yapın ve önemli kararları açıklayın.

Birleştirme Öncesinde Son Kontrol Yapın

Merge işleminden önce hedef branch'i, commit listesini, değişen dosyaları ve test sonuçlarını yeniden gözden geçirin.

28. Pull Request Kullanırken Yapılan Yaygın Hatalar

Hata 1: Yanlış Base Branch Seçmek

Pull Request oluştururken hedef branch'in yanlış seçilmesi, değişikliklerin yanlış geliştirme hattına önerilmesine neden olabilir.

Bu nedenle base ve compare seçimlerini dikkatlice kontrol edin.

Hata 2: Feature Branch'i GitHub'a Göndermemek

Yerel bilgisayarınızda oluşturduğunuz branch, uzak repository'ye gönderilmemiş olabilir.

Bu durumda GitHub üzerinde ilgili branch'i göremeyebilirsiniz.

Branch'i göndermek için:

git push -u origin feature/login-form

Komutu kullanılabilir.

Hata 3: Gereğinden Büyük Pull Request Hazırlamak

Bir Pull Request içerisinde yüzlerce ilgisiz dosyanın değiştirilmesi inceleme sürecini zorlaştırabilir.

Bu nedenle farklı amaçlara hizmet eden değişiklikleri mümkün olduğunda ayrı Pull Request'lerde düzenlemek faydalıdır.

Hata 4: Review Onayı Olmadan Merge Etmek

Repository kuralları inceleme gerektirmiyorsa teknik olarak doğrudan merge mümkün olabilir.

Ancak takım çalışmalarında önemli değişikliklerin uygun inceleme sürecinden geçirilmesi önerilir.

Hata 5: Başarısız Testleri Görmezden Gelmek

Pull Request kontrolleri başarısız olduğunda hatanın nedenini incelemek gerekir.

Testleri geçersiz hale getirerek veya kontrol mekanizmalarını gereksiz yere devre dışı bırakarak merge yapmak sorunların ana branch'e taşınmasına neden olabilir.

Hata 6: Hassas Bilgileri Pull Request'e Eklemek

API anahtarları, servis hesabı özel anahtarları, veritabanı parolaları veya erişim belirteçleri Pull Request içerisine eklenmemelidir.

Bu bilgiler yanlışlıkla paylaşıldıysa ilgili erişim bilgilerinin geçersiz hale getirilmesi ve güvenlik incelemesi yapılması gerekir.

Yalnızca dosyayı silmek veya .gitignore eklemek önceki commit geçmişindeki bilgileri ortadan kaldırmaz.

Hata 7: Merge Conflict Durumunu Kontrol Etmemek

Ana branch üzerinde başka geliştiricilerin yaptığı değişiklikler nedeniyle Pull Request'inizde merge conflict oluşabilir.

Bu durumda ilgili branch'i güncelleyerek çakışmaları çözmek gerekebilir.

Merge conflict çözümünü Git ve GitHub eğitim serimizin beşinci bölümünde ayrıntılı olarak incelemiştik.

29. Pull Request Komutları Hızlı Referans Tablosu

Komut Açıklama
git switch main Ana branch'e geçer.
git pull --ff-only Uygun upstream üzerinden yalnızca fast-forward güncelleme yapar.
git switch -c feature/login-form Yeni feature branch oluşturur ve geçiş yapar.
git status Değişiklikleri gösterir.
git add login.html Dosyadaki değişiklikleri staging alanına ekler.
git commit -m "Mesaj" Yeni commit oluşturur.
git push -u origin feature/login-form Branch'i GitHub'a gönderir ve upstream ayarlar.
git push Uygun yapılandırılmış branch'e commit gönderir.
gh auth login GitHub CLI kimlik doğrulamasını başlatır.
gh pr create Pull Request oluşturma sürecini başlatır.
gh pr list Pull Request listesini görüntüler.
gh pr status İlgili Pull Request durumlarını gösterir.
gh pr checks Pull Request otomatik kontrol sonuçlarını gösterir.
gh pr merge Uygun Pull Request'i birleştirmek için kullanılır.
git branch -d branch-ismi Uygun koşulları sağlayan yerel branch'i siler.

30. Sık Sorulan Sorular

GitHub Pull Request Nedir?

Pull Request, bir branch üzerinde yapılan değişikliklerin başka bir branch'e dahil edilmesini önermek ve kod inceleme sürecini yönetmek için kullanılan GitHub özelliğidir.

Pull Request Oluşturmak İçin GitHub Hesabı Gerekir mi?

Evet. GitHub üzerinde Pull Request oluşturmak için bir hesapla oturum açmanız ve ilgili kaynak branch üzerinde gerekli erişim koşullarını sağlamanız gerekir.

Pull Request ile Git Merge Aynı Şey mi?

Hayır. Pull Request değişikliklerin incelenmesini ve entegrasyon sürecinin yönetilmesini sağlar. Git merge ise farklı commit geçmişlerini birleştiren Git işlemidir.

Pull Request Oluşturunca Kod Otomatik Birleşir mi?

Hayır. Normal Pull Request oluşturma işlemi hedef branch'i otomatik değiştirmez. Birleştirme için gerekli koşulların sağlanması ve uygun merge işleminin gerçekleştirilmesi gerekir.

Pull Request İçin Reviewer Zorunlu mu?

Her repository'de zorunlu değildir. Ancak branch protection veya ruleset ayarları üzerinden belirli sayıda inceleme onayı gerekli hale getirilebilir.

Draft Pull Request Nedir?

Draft Pull Request, henüz tamamlanmamış çalışmaların ekip üyeleriyle paylaşılması ve erken geri bildirim alınması için kullanılan Pull Request türüdür.

Pull Request Açıldıktan Sonra Yeni Commit Eklenebilir mi?

Evet. Kaynak branch'e yeni commit gönderildiğinde açık Pull Request bu değişiklikleri yansıtabilir.

Pull Request Nasıl Onaylanır?

Uygun reviewer, Pull Request değişikliklerini inceleyerek Approve değerlendirmesi gönderebilir. Ancak merge için başka koşulların da sağlanması gerekebilir.

Pull Request Merge Edildikten Sonra Branch Silinir mi?

Kaynak branch otomatik olarak her durumda silinmez. GitHub üzerinde uygun seçeneklerle silinebilir veya repository ayarlarında merge sonrası otomatik branch silme yapılandırılabilir.

GitHub Pull Request Ücretsiz mi?

GitHub'ın ücretsiz planında Pull Request özellikleri kullanılabilir. Ancak gelişmiş ekip yönetimi, branch koruması ve diğer bazı özelliklerin kullanılabilirliği plan ve repository türüne göre değişebilir.

GitHub CLI ile Pull Request Oluşturulabilir mi?

Evet. GitHub CLI kurulu ve yetkilendirilmişse gh pr create komutuyla Pull Request oluşturma işlemi terminal üzerinden gerçekleştirilebilir.

Fork ile Pull Request Arasındaki Fark Nedir?

Fork, bir repository'nin farklı bir GitHub hesabı altında oluşturulan kopyasıdır. Pull Request ise bu kopyada veya başka bir branch'te hazırlanan değişikliklerin hedef repository'ye dahil edilmesini önermek için kullanılabilir.

Bir Pull Request Birden Fazla Commit İçerebilir mi?

Evet. Bir Pull Request, kaynak branch üzerinde bulunan birden fazla commit'i kapsayabilir.

Pull Request Kapatılırsa Kod Silinir mi?

Bir Pull Request'i birleştirmeden kapatmak, kaynak branch'i veya commit kayıtlarını otomatik olarak silmez. Branch ve commit'lerin korunma durumu ayrı olarak değerlendirilir.

31. Sonuç: GitHub Pull Request ve Takım Çalışmasını Öğrendik

Bu rehberde GitHub Pull Request sisteminin ne olduğunu, neden kullanıldığını ve profesyonel yazılım geliştirme süreçlerinde nasıl çalıştığını ayrıntılı olarak öğrendik.

Örnek bir proje üzerinde feature branch oluşturarak yeni bir kullanıcı giriş ekranı hazırladık ve GitHub'a gönderdik.

Ardından Pull Request oluşturma, base ve compare branch seçimi, reviewer ekleme, kod inceleme, yorumlara cevap verme ve yeni commit gönderme işlemlerini ele aldık.

Ayrıca GitHub Checks, Branch Protection, CODEOWNERS, Draft Pull Request ve farklı merge yöntemlerinin kullanımını inceledik.

GitHub Pull Request sistemi, yazılım ekiplerinin yalnızca kodlarını birleştirmesine değil, aynı zamanda teknik kararları birlikte değerlendirmesine ve proje kalitesini artırmasına yardımcı olur.

Git ve GitHub Eğitim Serisi - Bölüm 9: Git Revert, Reset ve Rebase Nedir? Git'te Değişiklikleri Geri Alma ve Commit Geçmişini Yönetme.

Bir sonraki bölümde yanlış oluşturulan commit kayıtlarını nasıl geri alacağımızı, Git geçmişini nasıl düzenleyebileceğimizi ve revert, reset ile rebase arasındaki önemli farkları gerçek örneklerle öğreneceğiz.

Nizokka Akademi üzerindeki Git, GitHub, JavaScript, PHP, Python ve yazılım geliştirme eğitimlerini takip ederek programlama becerilerinizi geliştirmeye devam edebilirsiniz.

Kaynaklar ve Ek Okumalar

```

Benzer içerikler

Git ve GitHub

Git Clone, Pull ve Fetch Nedir? GitHub Projelerini Güncelleme Rehberi

Git clone, pull ve fetch komutları nasıl kullanılır? GitHub projelerini bilgisayarınıza indirmeyi, uzak depodaki değişiklikleri kontrol etmeyi, yerel branch'leri güncellemeyi ve git pull ile git fetch arasındaki farkları uygulamalı örneklerle öğrenin.

İçeriği oku →

Git ve GitHub

Git Merge Nedir? Branch Birleştirme ve Merge Conflict Çözümü

Git merge nedir ve branch'ler nasıl birleştirilir? Bu kapsamlı rehberde Fast-Forward Merge, Three-Way Merge, Merge Commit ve Merge Conflict kavramlarını öğrenin. Gerçek Git komutlarıyla branch birleştirmeyi, kod çakışmalarını çözmeyi ve hatalı merge işlemlerini güvenle iptal etmeyi keşfedin.

İçeriği oku →

Git ve GitHub

Git Branch Nedir? Branch Oluşturma ve Yönetimi Rehberi

Git branch nedir, nasıl oluşturulur ve yönetilir? Bu kapsamlı rehberde git branch, git switch ve git checkout komutlarını, main ve feature branch mantığını, GitHub'a branch göndermeyi ve güvenli branch silme yöntemlerini uygulamalı örneklerle öğrenin.

İçeriği oku →

Teknik desteğe mi ihtiyacınız var?

Projenizin kapsamını birlikte değerlendirelim

İletişime geçin