Main Branch (eskiden Master), dağıtıma hazır kararlı üretim kodu içeren Git'in ana dalıdır. Main'deki her commit, projenin bir sürümüne karşılık gelir ve dalın kendisi doğrudan değişikliklere karşı korunur ve tüm ekip için tek doğruluk kaynağı olarak hizmet eder. GitHub, 2020'ye göre, Ekim 2020'den itibaren varsayılan yeni dal, master yerine main olarak adlandırılıyor.
Önemli Noktalar
Main Branch (veya Master — depo ayarlarına bağlı olarak), herhangi bir Git deposunu başlatırken oluşturulan varsayılan daldır. Projenin ana dalıdır ve üretime dağıtıma hazır kod içerir.
Yeni özelliklerle günlük çalışmanın tüm hızıyla devam ettiği develop'ın aksine, main projenin vitrinidir. Main'deki her kod sürümü tam bir döngüden geçmiştir: feature dalında geliştirme, develop'a entegrasyon, release dalında sürüm hazırlığı ve son testler. Ancak bundan sonra değişiklikler main'e ulaşır.
Temel prensip: main her zaman kararlı olmalıdır. Main'de bir hata bulunursa, bu, sıra dışı acil bir hotfix yayınlanması gerektiği anlamına gelir. Bu nedenle, profesyonel projelerde main, dal koruma kurallarıyla kazara yapılan değişikliklere karşı korunur.
Git Book'a göre main, benzersiz özelliklere sahip özel bir dal değil, gelenek gereği ana olarak kabul edilen bir commit'e yapılan normal bir referanstır. Git, sistem düzeyinde main ile diğer dallar arasında ayrım yapmaz.
Tarihsel olarak, Git'teki varsayılan dal master olarak adlandırılıyordu. Haziran 2020'de, Black Lives Matter hareketi IT sektöründeki master ve slave terimlerine dikkat çekti. GitHub, varsayılan dal için main terimine geçişi duyurdu.
Ekim 2020'den itibaren, GitHub'daki tüm yeni depolar main dalı ile oluşturuluyor. GitLab ve Bitbucket da varsayılan ad olarak main desteğini uyguladı. Git 2.28 (Temmuz 2020), varsayılan dal adını yapılandırmak için init.defaultBranch seçeneğini ekledi.
Teknik olarak, mevcut bir dalı master'dan main'e yeniden adlandırmak basit bir işlemdir. Ana zorluk, CI/CD yapılandırmalarındaki, belgelerdeki ve geliştiricilerin yerel depolarındaki tüm referansları güncellemektir.
Mevcut bir depoda bir dalı yeniden adlandırmak için şunu çalıştırın:
# Master'ı yerel olarak main olarak yeniden adlandırma
git branch -m master main
# Uzak depoyu güncelleme
git push -u origin main
# Sunucudaki eski master'ı silme
git push origin --delete master
# Sunucuda HEAD'i güncelleme
# (GitHub web arayüzü üzerinden: Settings → Branches → Default branch)
Git Flow ve GitHub Flow, main dalının rolünü farklı şekilde tanımlar. Model seçimi, ekip büyüklüğüne, sürüm sıklığına ve kod kararlılığı gereksinimlerine bağlıdır.
| Özellik | Git Flow | GitHub Flow |
|---|---|---|
| Main'in rolü | Yalnızca sürümler | Merkezi geliştirme dalı |
| Ek dallar | Develop, Release, Hotfix | Yalnızca feature dalları |
| Sürüm sıklığı | 1-4 haftada bir | Günde birkaç kez |
| Karmaşıklık | Yüksek | Düşük |
| Ne zaman seçilmeli | Sürüm döngülü mobil uygulamalar | Sürekli dağıtımlı web servisleri |
Mobil geliştirme için, Git Flow standarttır çünkü bir uygulamayı App Store ve Google Play'de yayınlamanın sabit sürüm döngüleri vardır. GitHub Flow, günde birkaç kez dağıtılabilen web projeleri için daha uygundur.
GitHub Flow'da develop dalı yoktur. Tüm feature dalları doğrudan main'den oluşturulur ve tamamlandıktan sonra bir Pull Request aracılığıyla geri birleştirilir. Main'deki her birleştirme, otomatik olarak üretime dağıtımı tetikler. Bu model, yüksek düzeyde test otomasyonu ve ekip disiplini gerektirir.
GitHub Flow'da develop dalı yoktur. Tüm feature dalları doğrudan main'den oluşturulur ve tamamlandıktan sonra bir Pull Request aracılığıyla geri birleştirilir. Main'deki her birleştirme, otomatik olarak üretime dağıtımı tetikler. Bu model, yüksek düzeyde test otomasyonu ve ekip disiplini gerektirir.
Main için dal koruması, herhangi bir ticari projede zorunlu bir ayardır. Bu olmadan, kazara yapılan bir push, tamamlanmamış kodu üretime gönderebilir veya tüm kullanıcılar için çalışan bir uygulamayı bozabilir.
Altı kuralın tümünü yapılandırmak, 10.000+ kullanıcılı mobil projeler için standarttır. Küçük projeler için ilk üç kural yeterlidir.
Main'in koruma seviyesi, projenin ölçeğine bağlıdır. Bir startup, minimum koruma ile idare edebilirken, kurumsal bir uygulama maksimum kısıtlamalar gerektirir.
Etiketleme, main'deki belirli commit'lere adlandırılmış referanslar oluşturma uygulamasıdır. Her etiket, üretime yayınlanan uygulamanın bir sürümüne karşılık gelir. Bu, hata ayıklama veya yama için önceki herhangi bir sürüme hızla geçiş yapılmasını sağlar.
Mobil geliştirmede etiket adlandırma standardı SemVer'dir (Anlamsal Sürümleme): v1.2.3, burada ilk sayı ana sürüm (kırıcı değişiklikler), ikincisi alt sürüm (yeni özellikler) ve üçüncüsü yamadır (düzeltmeler).
Release dalı main'e birleştirildikten sonra bir etiket oluşturulur. Bu commit daha sonra CI/CD'de derlenir, imzalanır ve uygulama mağazasına gönderilir. Etikette bir hata bulunursa, bu etiketten bir hotfix dalı oluşturulur.
# Açıklamalı sürüm etiketi oluşturma
git tag -a v2.4.1 -m "Release version 2.4.1"
# Etiketi sunucuya gönderme
git push origin v2.4.1
# Depodaki tüm etiketleri görüntüleme
git tag -l "v2.*"
# Belirli bir etiketten hotfix dalı oluşturma
git checkout -b hotfix/crash-fix v2.4.1
Git Flow'daki dal hiyerarşisini anlamak, işbirlikçi geliştirmeyi doğru şekilde organize etmenin temelidir. Her dal türünün kendi kaynağı, amacı ve birleştirme kuralları vardır.
Önemli kural: feature asla doğrudan main'e birleştirilmez. feature → develop → release → main doğru birleştirme zinciridir. Bu kuralı ihlal etmek, tüm Git Flow modelinin amacını geçersiz kılar.
Bir senaryo düşünelim: ekip, v2.5.0 sürümünün hazırlığını tamamladı. Release dalı incelendi ve main'e birleştirilmeye hazır. Birleştirmeden sonra bir etiket oluşturulur ve sürüm yayınlanır.
# Main'e geçme ve güncelleme
git checkout main
git pull origin main
# Doğrulanmış release dalını birleştirme
git merge --no-ff release/2.5.0
# Sürüm etiketi oluşturma
git tag -a v2.5.0 -m "Release 2.5.0 - Payment integration"
# Main ve etiketi sunucuya gönderme
git push origin main --tags
--no-ff bayrağı (hızlı ilerleme yok), birleştirme yalnızca işaretçi hareket ettirilerek yapılabilecek olsa bile bir birleştirme commit'i oluşturulmasını garanti eder. Bu, değişikliklerin bir release dalından geldiği bilgisini koruyarak geçmiş analizini kolaylaştırır.
Üretimde kritik bir hata keşfedilirse, süreç normal bir sürümden farklıdır. Hotfix, main'den oluşturulur ve düzeltmeden sonra hem main'e hem de develop'a birleştirilir.
Üretimde kritik bir hata keşfedilirse, süreç normal bir sürümden farklıdır. Hotfix, main'den oluşturulur ve düzeltmeden sonra hem main'e hem de develop'a birleştirilir.
# Main'den hotfix dalı oluşturma
git checkout main
git checkout -b hotfix/2.5.1-crash-fix
# Düzeltme ve commit yapma
git add src/fix/
git commit -m "Fix crash on login screen"
# Hotfix'i main'e geri birleştirme
git checkout main
git merge --no-ff hotfix/2.5.1-crash-fix
git tag -a v2.5.1 -m "Hotfix 2.5.1"
git push origin main --tags
# Hotfix'i develop'a da birleştirme
git checkout develop
git merge --no-ff hotfix/2.5.1-crash-fix
git push origin develop
# Hotfix dalını silme
git branch -d hotfix/2.5.1-crash-fix
Sıkça Sorulan Sorular
Teknik olarak — evet, bu bir commit'e yapılan normal bir referanstır. Ancak pratikte — hayır, çünkü main varsayılan daldır ve çoğu platform varsayılan dal olarak ayarlanmış dalın silinmesine izin vermez. Silmek yerine, yeni bir varsayılan dal oluşturun ve ardından eskisini silin.
Hata kritik değilse, normal süreci kullanın: develop'dan bir feature dalı oluşturun, hatayı düzeltin, kod incelemesi yapın ve bir sonraki sürüm döngüsünü bekleyin. Hotfix yalnızca kullanıcıların çalışmasını engelleyen kritik hatalar için kullanılır.
main bilgisayarınızdaki yerel bir daldır. origin/main sunucudaki uzak dalın durumunun yerel önbelleğidir. git fetch komutu origin/main'i güncellerken, git pull değişiklikleri hemen yerel main'inize birleştirir.
Tüm depoyu yeni bir dizine kopyalamak için git clone kullanın. Uzak URL'yi değiştirmeniz gerekiyorsa, git remote set-url origin komutunu çalıştırın. Depoyu kopyalamadan çalışma dizinini değiştirmek için git worktree add kullanın.
Evet, iki kişilik bir ekipte bile main koruması haklıdır. Yanlış bir komutla kazara yapılan push, geçmişin üzerine yazabilir. Minimum koruma — doğrudan push'ları yasaklama ve PR gerektirme — kurulumu 5 dakika sürer ve saatlerce sürecek veri kurtarmayı önler.
Özet
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