Release Branch, belirli bir sürümü dağıtıma hazırlamak için develop'dan oluşturulan Git Flow'daki bir daldır. Bu dalda uygulama sürümü sabitlenir, son hatalar düzeltilir ve meta veriler güncellenir — yeni özellikler eklenmeden. Vincent Driessen, 2010'a göre, sürüm dalı, sürüm hazırlığını mevcut geliştirmeden ayırarak her iki faaliyetin paralel olarak yürütülmesine olanak tanır.
Önemli Noktalar
release/X.Y.Z uygulama sürümüne göre.Release Branch (sürüm dalı), ekibin mevcut özellik setinin yayına hazır olduğuna karar verdiğinde develop'tan oluşturulan Git Flow'taki geçici bir daldır. Son sürüm hazırlığı ne kadar sürerse (birkaç saatten birkaç güne kadar) o kadar süre var olur.
Sürüm dalının temel amacı, sonraki sürümlerin geliştirilmesini durdurmadan belirli bir özellik setini yayın için dondurmaktır. Sürüm dalı dağıtıma hazırlanırken, diğer geliştiriciler bir sonraki sürüm için develop'a özellik dallarını birleştirmeye devam edebilir.
Sürüm dalında yeni özellikler oluşturulmaz — yalnızca hata düzeltmeleri, uygulama sürümü güncellemesi, yerelleştirme ve dokümantasyon yapılır. Tüm çalışmalar tamamlandıktan sonra, sürüm dalı main'e (sürüm olarak işaretlenir) ve develop'a (hata düzeltmelerinin gelecek sürümlere ulaşması için) birleştirilir.
Atlassian, 2024'e göre, sürüm dalları düzenli yayın döngüleri olan projeler için kritik öneme sahiptir — yayın sürecinin öngörülebilirliğini ve istikrarını sağlarlar.
Sürüm dalının yaşam döngüsü, oluşturulmasından silinmesine kadar birkaç aşama içerir. Her aşamayı anlamak, ekibin eylemleri senkronize etmesine ve hatalardan kaçınmasına yardımcı olur.
release/2.5.0 adında bir dal oluşturulur. develop, sonraki sürüm için özellik dallarını kabul etmeye devam eder.v2.5.0.6. adım — develop'a geri birleştirme — sıklıkla unutulur, ancak kritik öneme sahiptir. Bu adım olmadan, sürüm dalında yapılan hata düzeltmeleri develop'a ulaşmaz ve aynı hatalar bir sonraki sürümde tekrar ortaya çıkabilir.
Sürüm dalının ömrü, sürümün karmaşıklığına ve develop'taki kod kalitesine bağlıdır. Ortalama olarak, orta boy bir mobil uygulama için hazırlık 2 ila 5 iş günü sürer.
Sürüm dalında kesinlikle sınırlı bir görev seti yürütülür. Bu listeden herhangi bir sapma, Git Flow modelini ihlal eder ve sürüm istikrarı için risk oluşturur.
| Değişiklik türü | İzin verilir | Örnek |
|---|---|---|
| Sürümleme | Evet | build.gradle'da versionName güncelleme |
| Hata düzeltmeleri | Evet | Başlangıçta çökme düzeltmesi |
| Yerelleştirme | Evet | Yeni ekranlar için çeviriler ekleme |
| Dokümantasyon | Evet | CHANGELOG ve README güncelleme |
| Yeni özellikler | Hayır | Yeni profil ekranı ekleme |
| Yeniden düzenleme | Hayır | Ağ katmanını yeniden yazma |
| Kütüphane güncellemeleri | Dikkatli | Yalnızca hata düzeltmeleri için yama sürümleri |
Yeni özellik yasağı kuralı, sürüm dalında en önemlisidir. Bir özellik sürüme yetişmediyse, sonraki döngüyü bekler. Tamamlanmamış bir özelliği sürüm dalına itmeye çalışmak, son teslim tarihlerinin kaçırılmasının ve üretim hatalarının başlıca nedenidir.
Sürüm dalında uygulama sürüm numarası zorunlu olarak güncellenir. Android için bunlar build.gradle'daki versionCode ve versionName alanlarıdır; iOS için — Info.plist'teki CFBundleShortVersionString.
// build.gradle (uygulama düzeyi) — sürüm dalında sürüm güncelleme
android {
defaultConfig {
versionCode 42
versionName "2.5.0"
}
}
// iOS için — Info.plist güncelleme
// CFBundleShortVersionString = 2.5.0
// CFBundleVersion = 42
Acemi geliştiriciler genellikle release ve hotfix dallarını karıştırır, ancak amaçları temelde farklıdır. Yanlış dal türünü seçmek, kritik bir düzeltmeyi geciktirebilir veya sürüm sürecini bozabilir.
Sürüm hazırlığı sırasında (sürüm dalında) bir hata bulunursa, bu normal bir hata düzeltmesidir. Üretimde (main'de) bir hata bulunursa, bu bir hotfix'tir ve sürüm dalı zaten mevcut olsa bile main'den oluşturulur.
Birleşik bir sürüm dalı adlandırma standardı, depo gezinmesini basitleştirir ve CI/CD sistemlerinin bir dalın sürüm sürecine ait olduğunu otomatik olarak algılamasını sağlar.
release/2.5.0.release/merlin.release/2024-12-01.release/X.Y.Z biçimi tercih edilir, çünkü dalı sürüme atanacak sürüm numarasına açıkça bağlar. Bu, CI/CD betikleriyle aramayı ve otomatik işlemeyi basitleştirir.
Sürüm dalının develop'a geri birleştirmesi (merge back), en önemli ve aynı zamanda en sık atlanan işlemlerden biridir. Bu işlem olmadan, sürüm dalında yapılan tüm hata düzeltmeleri yalnızca sürüm sürümünde kalır ve sonraki sürüm döngüsüne ulaşmaz.
Geri birleştirme işlemi, sürüm dalı main'e birleştirildikten sonra gerçekleştirilir. Önce release develop'a birleştirilir, ardından silinir. Bu, develop'ın sürüm hazırlığı sırasında yapılan tüm düzeltmeleri içermesini sağlar.
Geri birleştirmeden sonra çakışmalar meydana gelebilir — özellikle aynı dosyaları değiştiren yeni özellik dalları develop'ta zaten görünmüşse. Sürümden sorumlu geliştirici bu çakışmaları çözer ve develop'ı sunucuya iletir.
Bazı ekipler, geçmişi doğrusal tutmak için geri birleştirme için merge yerine rebase kullanır. Ancak merge, develop için daha güvenlidir çünkü diğer geliştiriciler tarafından zaten kullanılıyor olabilecek commit geçmişini yeniden yazmaz.
Mobil uygulama sürümü 2.5.0'ın başarılı bir şekilde yayınlanmasının ardından sürüm dalıyla çalışmanın tam döngüsüne bakalım: oluşturmadan silmeye kadar.
# 1. Develop'tan sürüm dalı oluştur
git checkout develop
git pull origin develop
git checkout -b release/2.5.0
# 2. Sürüm ve hata düzeltmelerini güncelle
git add build.gradle
git commit -m "Bump version to 2.5.0"
# 3. Hataları düzelt (yalnızca bugfixes)
git add src/fix/
git commit -m "Fix crash on payment screen"
# 4. Sürüm dalını sunucuya gönder
git push origin release/2.5.0
# 5. Release'i main'e birleştir
git checkout main
git pull origin main
git merge --no-ff release/2.5.0
git tag -a v2.5.0 -m "Release 2.5.0"
git push origin main --tags
# 6. Develop'a geri birleştir
git checkout develop
git merge --no-ff release/2.5.0
git push origin develop
# 7. Sürüm dalını sil
git branch -d release/2.5.0
git push origin --delete release/2.5.0
5 ve 6 numaralı komutlar — çift birleştirme — kritik öneme sahiptir. Önce main sürüm kodunu ve etiketi alır, ardından develop sürümdeki hata düzeltmeleriyle senkronize olur. 6. adım atlanırsa, sürümdeki düzeltmeler sonraki geliştirme döngüsüne ulaşmaz.
Düzenli sürümleri olan mobil projeler için, sürüm dalı oluşturma ve sürüm güncelleme süreci CI/CD betikleri aracılığıyla otomatikleştirilebilir. GitHub Actions, bir düğmeye basıldığında otomatik sürüm güncellemesiyle bir sürüm dalı oluşturan bir iş akışı oluşturmayı sağlar.
Düzenli sürümleri olan mobil projeler için, sürüm dalı oluşturma ve sürüm güncelleme süreci CI/CD betikleri aracılığıyla otomatikleştirilebilir. GitHub Actions, bir düğmeye basıldığında otomatik sürüm güncellemesiyle bir sürüm dalı oluşturan bir iş akışı oluşturmayı sağlar.
# GitHub Actions — sürüm dalı oluşturmayı otomatikleştirme
name: Create Release Branch
on:
workflow_dispatch:
inputs:
version:
description: 'Release version (e.g. 2.5.0)'
required: true
jobs:
create-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Create release branch
run: |
git checkout develop
git checkout -b release/${{ inputs.version }}
git push origin release/${{ inputs.version }}
Sıkça sorulan sorular
Git Flow'u takip ediyorsanız aynı anda yalnızca bir sürüm dalı. İki aktif sürüm dalına sahip olmak, ekibin paralel olarak iki sürüm yayınlamaya çalıştığı anlamına gelir — bu, sıralı sürümler ilkesini ihlal eder ve sürümler konusunda karışıklık yaratır.
git revert ile sürüm dalından tamamlanmamış özelliğin commit'lerini kaldırın ve özelliği bir sonraki sürüme erteleyin. Tamamlanmamış işlevselliği asla üretime göndermeyin — teknik borç ve olası hatalar aceleye değmez.
Tek düzeltmeli basit sürümler için sürüm dalı atlanabilir ve doğrudan develop'tan main'e birleştirilebilir. Ancak standart sürümler için sürüm dalı zorunludur — sürümü sabitler, hazırlığı izole eder ve hata düzeltmelerinin çift birleştirmesini garanti eder.
Tüm sürüm değişikliklerini geri alan yeni bir commit oluşturmak için main'de git revert kullanın. Ardından git push origin --delete vX.Y.Z komutuyla sürüm etiketini silin. Sorunları düzelttikten sonra, artırılmış yama numarasıyla yeni bir sürüm dalı oluşturun.
Release candidate (RC), son testlerden geçen bir yapı yapısıdır. Release branch, release candidate'in oluşturulduğu Git dalıdır. Bir sürüm dalı, hatalar düzeltildikçe birden fazla RC yapısı (RC1, RC2, vb.) üretebilir.
Özet
release/X.Y.Z SemVer sürüm numarasıyla.Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun