Release branch develop branchtan gelen yeni özellikler ve hata onarımlarını barındırır. Çoğu zaman master branch, develop brancha nazaran daha eskidir çünkü uygulama geliştirme develop branch üzerinde gerçekleştirilir. Release branch işlemi bittiğinde, develop ve master branchlar ile birleştirilir. Bu işlemin sonucunda ise, her iki branch birbirlerine eşitlenmiş olurlar. Aşağıda bunu göreceğiz.



Release branch ile çalışırken, diğer takım üyelerininde yapılan işi gözden geçirebilmeleri için, GitHub içinde "pull request" oluşturulur. Bu işin aslıda budur!


Hazırlık


Yerel branchların eski olma olasılığı yüksek olduğu için, çalışmaya başlamadan önce bu adımların atılması mecburidir.


Adım 1


Aktif branch olarak develop'u seçin.


$ git branch
* develop
master

Adım 2


Tüm yenilikleri alın.


$ git remote update
Fetching origin

Adım 3


Yerel develop branchı yenileyin.


$ git pull origin develop
From github.com:inanzzz/manual
* branch develop -> FETCH_HEAD
Already up-to-date.

Release branch yaratma


Adım 1


Mevcut olan git durumunu kontrol et. Aşağıda gördüğümüz gibi master branch develop brancha nazaran daha eski.


$ git branch -avv
* develop d99ca8a [origin/develop] Merge pull request #1 from inanzzz/feature/hello-world
master 2f94f7d [origin/master] Very first commit
remotes/origin/develop d99ca8a Merge pull request #1 from inanzzz/feature/hello-world
remotes/origin/feature/hello-world 5a93e5a Feature hello-world commit
remotes/origin/master 2f94f7d Very first commit


Adım 2


Yerel develop branchtan türeyen ve uzak origin/develop branchı takip eden release branch yaratın.


$ git checkout -b release/0.1.0 origin/develop
Branch release/0.1.0 set up to track remote branch develop from origin.
Switched to a new branch 'release/0.1.0'

$ git branch
develop
master
* release/0.1.0

Adım 3


Bir "pull request" yaratmak için yayınlayın.


$ git push origin release/0.1.0
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:inanzzz/manual.git
* [new branch] release/0.1.0 -> release/0.1.0

Adım 4


Maalesef GitHub'a gittiğinizde, yayıladığınız release branch için gerekli olan "pull request" açmanızı isteyen ibare göremeyeceksiniz. "Pull request" açma işlemini manuel yapmanız gerekecek. Bunun için "New pull request" butonunu tıklayın, "base dropdown" için master, "compare dropdown" için ise release/0.1.0 branchını seçin. Daha sonra başlık ve açıklamayı yazarak işlemi sonlandırın. Eğer diğer takım üyelerinin release ile ilgili her hangi bir problemi yoksa, endişelenecek bir şey de yok demektir.



Adım 5


Aktif branch olarak master'ı seçin.


$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

$ git branch
develop
* master
release/0.1.0

Adım 6


Yerel master branchı yenileyin.


$ git pull origin master
From github.com:inanzzz/manual
* branch master -> FETCH_HEAD
Already up-to-date.

Adım 7


Yerel release branch ile master branchı birleştirin. Birleştirme sırasında --no-ff seçeneğini kullanmayın çünkü "fast-forward" yerine "recursive" stratejisi kullanılır. Bu da master branchı yayınladığımızda, GitHub içinde karşımıza gereksiz olan bir "pull request" açma ibaresi çıkmasına neden olur.


$ git merge release/0.1.0
Updating 2f94f7d..d99ca8a
Fast-forward
one.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 one.txt

Adım 8


Release anını etiketleyin.


$ git tag -a 0.1.0 -m 'Create release tag 0.1.0'

Adım 9


Etiketi kontrol edin.


$ git tag
0.1.0


Adım 10


Yerel master branchı yayınlayın. Bu işlem sonucunda GitHub içinde release branchı master branch ile birleşir, "pull request" kapatılır ama silinmez. GitHub'a baktığınızda göreceksiniz.


$ git push origin master
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:inanzzz/manual.git
2f94f7d..d99ca8a master -> master

Adım 11


Etiketi yayınlayın. Eğer GitHub'a giderseniz, "Release" tab altında etiketi göreceksiniz.


$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 179 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:inanzzz/manual.git
* [new tag] 0.1.0 -> 0.1.0


Adım 12


Aktif branch olarak develop'u seçin.


$ git checkout develop
Switched to branch 'develop'
Your branch is up-to-date with 'origin/develop'.

$ git branch
* develop
master
release/0.1.0

Adım 13


Release branch ile develop branchı birleştirin.


$ git merge release/0.1.0
Already up-to-date.

Adım 14


Yerel develop branchı yayınlayın.


$ git push origin develop
Everything up-to-date

Adım 15


Yerel release branchı silin.


$ git branch -D release/0.1.0
Deleted branch release/0.1.0 (was d99ca8a).

$ git branch
* develop
master

Adım 16


Uzak release branchı silin.


$ git push origin :release/0.1.0
To git@github.com:inanzzz/manual.git
- [deleted] release/0.1.0

Mevcut olan git durumunu kontrol et. Aşağıda gördüğümüz gibi master branch develop branch ile aynı.


$ git branch -avv
* develop d99ca8a [origin/develop] Merge pull request #1 from inanzzz/feature/hello-world
master d99ca8a [origin/master] Merge pull request #1 from inanzzz/feature/hello-world
remotes/origin/develop d99ca8a Merge pull request #1 from inanzzz/feature/hello-world
remotes/origin/feature/hello-world 5a93e5a Feature hello-world commit
remotes/origin/master d99ca8a Merge pull request #1 from inanzzz/feature/hello-world


Adım 17


Eğer GitHub'a giderseniz, aşağıdaki ifadelerin gerçekleştiğini göreceksiniz.



Yayınlama


Yayınlama işlemi yaparken, aktif branch olarak etiketi seçip, onu yayınlamalısınız.


$ git remote update
$ git checkout 0.1.0
$ git pull origin 0.1.0
$ cap production deploy

Özet


Yukarıda yapılanların kısa özetine bakalım.


# 1. Checked out into develop branch
git checkout develop

# 2. Fetched all remote updates
git remote update

# 3. Update local develop branch with remote copy
git pull origin develop

# 4. Created a release branch that tracks origin/develop
git checkout -b release/0.1.0 origin/develop

# 5. Pushed release branch to remote repository
git push origin release/0.1.0

# 6. Opened a "pull request" in GitHub for team to verify the release

# 7. Checkout into master branch
git checkout master

# 8. Updated local master branch with remote copy
git pull origin master

# 9. Merged release branch into master branch
git merge release/0.1.0

# 10. Tagged the release point by creating a new tag
git tag -a 0.1.0 -m 'Create release tag 0.1.0'

# 11. Pushed master branch to remote repository
git push origin master

# 12. Pushed the tags to remote repository
git push origin --tags

# 13. Checkout into develop branch
git checkout develop

# 14. Merged release branch into develop branch
git merge release/0.1.0

# 15. Pushed develop branch to remote repository
git push origin develop

# 16. Removed release branch from the local repository
git branch -D release/0.1.0

# 17. Removed release branch from the remote repository
git push origin :release/0.1.0