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! Ayrıca aşağıdaki komutlar içinde geçen "Summary of actions" notlarına dikkat edin.


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.

Adım 4


Aktif branch olarak master'ı seçin.


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

Adım 5


Yerel master branchı yenileyin.


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

Release branch yaratma


Adım 1


Mevcut olan git durumunu kontrol et.


$ git branch -avv
* develop 24683c1 [origin/develop] Feature hello-world commit
master c9b8a72 [origin/master] Very first commit
remotes/origin/develop 24683c1 Feature hello-world commit
remotes/origin/master c9b8a72 Very first commit


Adım 2


Release branchı başlat.


$ git flow release start 0.1.0
Switched to a new branch 'release/0.1.0'

Summary of actions:
- A new branch 'release/0.1.0' was created, based on 'develop'
- You are now on branch 'release/0.1.0'

Follow-up actions:
- Bump the version number now!
- Start committing last-minute fixes in preparing your release
- When done, run:

git flow release finish '0.1.0'

Aşağıda da gördüğümüz gibi release branch ana olarak develop branchtan türemiş durumda.


$ git branch -avv
develop 24683c1 [origin/develop] Feature hello-world commit
master c9b8a72 [origin/master] Very first commit
* release/0.1.0 24683c1 Feature hello-world commit
remotes/origin/develop 24683c1 Feature hello-world commit
remotes/origin/master c9b8a72 Very first commit

Adım 3


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


$ git flow release publish 0.1.0
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:inanzzz/gitflow.git
* [new branch] release/0.1.0 -> release/0.1.0
Branch release/0.1.0 set up to track remote branch release/0.1.0 from origin.
Already on 'release/0.1.0'
Your branch is up-to-date with 'origin/release/0.1.0'.

Summary of actions:
- The remote branch 'release/0.1.0' was created or updated
- The local branch 'release/0.1.0' was configured to track the remote branch
- You are now on branch '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.



Aşağıda da gördüğümüz gibi, release branch GitHub içinde yayınlanmış durumda.


$ git branch -avv
develop 24683c1 [origin/develop] Feature hello-world commit
master c9b8a72 [origin/master] Very first commit
* release/0.1.0 24683c1 [origin/release/0.1.0] Feature hello-world commit
remotes/origin/develop 24683c1 Feature hello-world commit
remotes/origin/master c9b8a72 Very first commit
remotes/origin/release/0.1.0 24683c1 Feature hello-world commit

Adım 5


Release branchı sonlandırın.


$ git flow release finish 0.1.0
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
Merge made by the 'recursive' strategy.
one.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 one.txt
Switched to branch 'develop'
Your branch is up-to-date with 'origin/develop'.
Already up-to-date!
Merge made by the 'recursive' strategy.
To git@github.com:inanzzz/gitflow.git
- [deleted] release/0.1.0
Deleted branch release/0.1.0 (was 24683c1).

Summary of actions:
- Release branch 'release/0.1.0' has been merged into 'master'
- The release was tagged '0.1.0'
- Release tag '0.1.0' has been back-merged into 'develop'
- Release branch 'release/0.1.0' has been locally deleted; it has been remotely deleted from 'origin'
- You are now on branch 'develop'

Aşağıda da gördüğümüz gibi, yukarıdaki "Summary of actions" adımlarının hepsi yapılmış durumda ama bunlar sadece yerel ortamda gerçekleşti. Yapmamız gereken aynı adımları uzak ortamada yansıtmak olacak.


$ git branch -avv
* develop 8f11c42 [origin/develop: ahead 2] I merged release 0.1.0
master 8aa2add [origin/master: ahead 2] I merged release 0.1.0
remotes/origin/develop 24683c1 Feature hello-world commit
remotes/origin/master c9b8a72 Very first commit

Adım 6


Yerel develop branchı yayınlayın.


$ git push origin develop
Counting objects: 2, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 355 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To git@github.com:inanzzz/gitflow.git
24683c1..8f11c42 develop -> develop

Adım 7


Yerel master branchı yayınlayın.


$ git push origin master
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:inanzzz/gitflow.git
c9b8a72..8aa2add master -> master


Adım 8


Etiketi kontrol edin.


$ git tag
0.1.0

Adım 9


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


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


Adım 10


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


$ git branch -avv
* develop 8f11c42 [origin/develop] I merged release 0.1.0
master 8aa2add [origin/master] I merged release 0.1.0
remotes/origin/develop 8f11c42 I merged release 0.1.0
remotes/origin/master 8aa2add I merged release 0.1.0

Adım 11


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. Checked out into master branch
git checkout master

# 5. Update local master branch with remote copy
git pull origin master

# 6. Checked out into develop branch
git checkout develop

# 7. Start release branch
git flow release start 0.1.0

# 8. Publish release branch
git flow release publish 0.1.0

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

# 10. Finish release branch
git flow release finish 0.1.0

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

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

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