Release Branch — είναι ένα branch στο Git Flow που δημιουργείται από το develop για την προετοιμασία μιας συγκεκριμένης έκδοσης. Σε αυτό καθορίζεται η έκδοση της εφαρμογής, διορθώνονται τα τελευταία σφάλματα και ενημερώνονται τα μεταδεδομένα — χωρίς προσθήκη νέων λειτουργιών. Σύμφωνα με τον Vincent Driessen, 2010, το release branch διαχωρίζει την προετοιμασία της έκδοσης από την τρέχουσα ανάπτυξη, επιτρέποντας την παράλληλη εκτέλεση και των δύο δραστηριοτήτων.
Κύρια σημεία
release/X.Y.Z σύμφωνα με την έκδοση της εφαρμογής.Release Branch (branch έκδοσης) — είναι ένα προσωρινό branch στο Git Flow, που δημιουργείται από το develop όταν η ομάδα αποφασίζει ότι το τρέχον σύνολο λειτουργιών είναι έτοιμο για κυκλοφορία. Υπάρχει ακριβώς όσο διαρκεί η τελική προετοιμασία της έκδοσης — από μερικές ώρες έως μερικές ημέρες.
Ο κύριος σκοπός του release branch — να παγώσει ένα συγκεκριμένο σύνολο λειτουργιών για την έκδοση, χωρίς να σταματήσει την ανάπτυξη των επόμενων εκδόσεων. Ενώ το release branch προετοιμάζεται για κυκλοφορία, άλλοι προγραμματιστές μπορούν να συνεχίσουν να συγχωνεύουν feature branches στο develop για την επόμενη έκδοση.
Στο release branch δεν δημιουργούνται νέες λειτουργίες — μόνο διορθώσεις σφαλμάτων, ενημέρωση έκδοσης εφαρμογής, εντοπισμός και τεκμηρίωση. Μετά την ολοκλήρωση όλων των εργασιών, το release branch συγχωνεύεται στο main (σηματοδοτείται ως έκδοση) και πίσω στο develop (για να περάσουν οι διορθώσεις σφαλμάτων σε μελλοντικές εκδόσεις).
Σύμφωνα με το Atlassian, 2024, τα release branches είναι κρίσιμα για έργα με τακτικούς κύκλους έκδοσης — εξασφαλίζουν προβλεψιμότητα και σταθερότητα της διαδικασίας κυκλοφορίας.
Κύκλος ζωής του release branch από τη δημιουργία έως τη διαγραφή περιλαμβάνει διάφορα στάδια. Η κατανόηση κάθε σταδίου βοηθά την ομάδα να συγχρονίσει τις ενέργειες και να αποφύγει λάθη.
release/2.5.0. Το develop συνεχίζει να δέχεται feature branches για την επόμενη έκδοση.v2.5.0.Το σημείο 6 — αντίστροφη συγχώνευση στο develop — συχνά ξεχνιέται, αλλά είναι κρίσιμο. Χωρίς αυτό, οι διορθώσεις σφαλμάτων που έγιναν στο release δεν θα περάσουν στο develop, και στην επόμενη έκδοση τα ίδια σφάλματα μπορεί να εμφανιστούν ξανά.
Η διάρκεια ζωής του release branch εξαρτάται από την πολυπλοκότητα της έκδοσης και την ποιότητα του κώδικα στο develop. Κατά μέσο όρο, η προετοιμασία διαρκεί από 2 έως 5 εργάσιμες ημέρες για μια εφαρμογή κινητού μεσαίου μεγέθους.
Στο release branch εκτελείται ένα αυστηρά περιορισμένο σύνολο εργασιών. Οποιαδήποτε απόκλιση από αυτήν τη λίστα παραβιάζει το μοντέλο Git Flow και δημιουργεί κινδύνους για τη σταθερότητα της έκδοσης.
| Τύπος αλλαγών | Επιτρέπεται | Παράδειγμα |
|---|---|---|
| Έκδοση | Ναι | Ενημέρωση versionName στο build.gradle |
| Διορθώσεις σφαλμάτων | Ναι | Διόρθωση crash κατά την εκκίνηση |
| Εντοπισμός | Ναι | Προσθήκη μεταφράσεων για νέες οθόνες |
| Τεκμηρίωση | Ναι | Ενημέρωση CHANGELOG και README |
| Νέες λειτουργίες | Όχι | Προσθήκη νέας οθόνης προφίλ |
| Αναδόμηση | Όχι | Επανεγγραφή επιπέδου δικτύου |
| Ενημέρωση βιβλιοθηκών | Προσεκτικά | Μόνο εκδόσεις patch για διορθώσεις σφαλμάτων |
Ο κανόνας απαγόρευσης νέων λειτουργιών — ο σημαντικότερος στο release branch. Εάν μια λειτουργία δεν πρόλαβε την έκδοση, περιμένει τον επόμενο κύκλο. Η προσπάθεια να προωθηθεί μια ημιτελής λειτουργία στο release branch — η κύρια αιτία καθυστερήσεων και σφαλμάτων στην παραγωγή.
Στο release branch ενημερώνεται υποχρεωτικά ο αριθμός έκδοσης της εφαρμογής. Για Android, αυτά είναι τα πεδία versionCode και versionName στο build.gradle, για iOS — το CFBundleShortVersionString στο Info.plist.
// build.gradle (app-level) — ενημέρωση έκδοσης στο release branch
android {
defaultConfig {
versionCode 42
versionName "2.5.0"
}
}
// Για iOS — ενημέρωση Info.plist
// CFBundleShortVersionString = 2.5.0
// CFBundleVersion = 42
Οι αρχάριοι προγραμματιστές συχνά μπερδεύουν τα release και hotfix branches, αν και ο σκοπός τους είναι θεμελιωδώς διαφορετικός. Ένα λάθος στην επιλογή του τύπου branch μπορεί να οδηγήσει σε καθυστέρηση μιας κρίσιμης διόρθωσης ή διακοπή της διαδικασίας έκδοσης.
Εάν ένα σφάλμα ανακαλυφθεί κατά τη διαδικασία προετοιμασίας της έκδοσης (στο release branch) — είναι μια συνηθισμένη διόρθωση σφάλματος. Εάν ένα σφάλμα ανακαλυφθεί στην παραγωγή (στο main) — είναι hotfix και δημιουργείται από το main, ακόμα κι αν το release branch υπάρχει ήδη.
Ένα ενιαίο πρότυπο ονομασίας release branches απλοποιεί την πλοήγηση στο αποθετήριο και επιτρέπει στα συστήματα CI/CD να καθορίζουν αυτόματα ότι το branch ανήκει στη διαδικασία έκδοσης.
release/2.5.0.release/merlin.release/2024-12-01.Η μορφή release/X.Y.Z — προτιμάται, καθώς συνδέει ρητά το branch με τον αριθμό έκδοσης που θα αποδοθεί στην έκδοση. Αυτό απλοποιεί την αναζήτηση και την αυτόματη επεξεργασία από σενάρια CI/CD.
Αντίστροφη συγχώνευση (merge back) του release branch στο develop — μία από τις πιο σημαντικές και ταυτόχρονα συχνά παραβλεπόμενες λειτουργίες. Χωρίς αυτήν, όλες οι διορθώσεις σφαλμάτων που έγιναν στο release παραμένουν μόνο στην έκδοση και δεν εισέρχονται στον επόμενο κύκλο έκδοσης.
Η διαδικασία αντίστροφης συγχώνευσης εκτελείται αφού το release branch έχει ήδη συγχωνευθεί στο main. Πρώτα το release συγχωνεύεται στο develop, στη συνέχεια — διαγράφεται. Αυτό εγγυάται ότι το develop περιέχει όλες τις διορθώσεις που έγιναν κατά την προετοιμασία της έκδοσης.
Μετά την αντίστροφη συγχώνευση είναι πιθανές συγκρούσεις — ειδικά αν στο develop έχουν ήδη εμφανιστεί νέα feature branches που τροποποίησαν τα ίδια αρχεία. Ο προγραμματιστής που είναι υπεύθυνος για την έκδοση επιλύει αυτές τις συγκρούσεις και ωθεί το develop στον διακομιστή.
Ορισμένες ομάδες χρησιμοποιούν rebase αντί για merge για αντίστροφη συγχώνευση, ώστε το ιστορικό να παραμένει γραμμικό. Ωστόσο, το merge είναι ασφαλέστερο για το develop, καθώς δεν ξαναγράφει το ιστορικό commits που μπορεί να έχουν ήδη χρησιμοποιηθεί από άλλους προγραμματιστές.
Ας εξετάσουμε τον πλήρη κύκλο εργασίας με το release branch: από τη δημιουργία έως τη διαγραφή μετά την επιτυχή κυκλοφορία της εφαρμογής κινητού έκδοσης 2.5.0.
# 1. Δημιουργία release branch από το develop
git checkout develop
git pull origin develop
git checkout -b release/2.5.0
# 2. Ενημέρωση έκδοσης και διορθώσεις σφαλμάτων
git add build.gradle
git commit -m "Bump version to 2.5.0"
# 3. Διόρθωση σφαλμάτων (μόνο bugfixes)
git add src/fix/
git commit -m "Fix crash on payment screen"
# 4. Αποστολή release branch στον διακομιστή
git push origin release/2.5.0
# 5. Συγχώνευση release στο main
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
git checkout develop
git merge --no-ff release/2.5.0
git push origin develop
# 7. Διαγραφή release branch
git branch -d release/2.5.0
git push origin --delete release/2.5.0
Οι εντολές 5 και 6 — διπλή συγχώνευση — είναι κρίσιμες. Πρώτα το main λαμβάνει τον κώδικα έκδοσης και την ετικέτα, στη συνέχεια το develop συγχρονίζεται με τις διορθώσεις σφαλμάτων από το release. Εάν παραλειφθεί το βήμα 6, οι διορθώσεις από την έκδοση δεν θα περάσουν στον επόμενο κύκλο ανάπτυξης.
Για έργα κινητού με τακτικές εκδόσεις, η διαδικασία δημιουργίας release branch και ενημέρωσης έκδοσης μπορεί να αυτοματοποιηθεί μέσω σεναρίων CI/CD. Το GitHub Actions επιτρέπει τη δημιουργία ενός workflow που, με το πάτημα ενός κουμπιού, δημιουργεί ένα release branch με αυτόματη ενημέρωση έκδοσης.
Για έργα κινητού με τακτικές εκδόσεις, η διαδικασία δημιουργίας release branch και ενημέρωσης έκδοσης μπορεί να αυτοματοποιηθεί μέσω σεναρίων CI/CD. Το GitHub Actions επιτρέπει τη δημιουργία ενός workflow που, με το πάτημα ενός κουμπιού, δημιουργεί ένα release branch με αυτόματη ενημέρωση έκδοσης.
# GitHub Actions — αυτοματοποίηση δημιουργίας release branch
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 }}
Συχνές Ερωτήσεις
Μόνο ένα release branch ταυτόχρονα, αν ακολουθείτε το Git Flow. Η ύπαρξη δύο ενεργών release branches σημαίνει ότι η ομάδα προσπαθεί να κυκλοφορήσει δύο εκδόσεις παράλληλα — αυτό παραβιάζει την αρχή των διαδοχικών εκδόσεων και δημιουργεί σύγχυση με τις εκδόσεις.
Αφαιρέστε τα commits της ημιτελούς λειτουργίας από το release branch μέσω git revert και αναβάλετε τη λειτουργία για την επόμενη έκδοση. Ποτέ μην κυκλοφορείτε ημιτελή λειτουργικότητα στην παραγωγή — το τεχνικό χρέος και τα πιθανά σφάλματα δεν αξίζουν τη βιασύνη.
Για απλές εκδόσεις με μία διόρθωση, το release branch μπορεί να παραλειφθεί και να γίνει απευθείας συγχώνευση από το develop στο main. Ωστόσο, για τυπικές εκδόσεις, το release branch είναι υποχρεωτικό — καθορίζει την έκδοση, απομονώνει την προετοιμασία και εξασφαλίζει διπλή συγχώνευση διορθώσεων σφαλμάτων.
Χρησιμοποιήστε git revert στο main για να δημιουργήσετε ένα νέο commit που ακυρώνει όλες τις αλλαγές της έκδοσης. Στη συνέχεια, διαγράψτε την ετικέτα έκδοσης με την εντολή git push origin --delete vX.Y.Z. Αφού διορθώσετε τα προβλήματα, δημιουργήστε ένα νέο release branch με αυξημένο αριθμό patch.
Release candidate (RC) — είναι ένα build artifact που υποβάλλεται σε τελική δοκιμή. Το release branch — είναι το Git branch από το οποίο δημιουργείται το release candidate. Ένα release branch μπορεί να δημιουργήσει πολλά RC builds (RC1, RC2, κ.λπ.) καθώς διορθώνονται σφάλματα.
Σύνοψη
release/X.Y.Z με αριθμό έκδοσης σύμφωνα με το SemVer.Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης