16/04/2016 - GIT
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.
develop
branchtan türerler.develop
hem de master
branch ile birleşirler.release/x-x-x
kullanılır. Format x[major release]-x[release]-x[hot-fix]
release etiketini temsil eder. Örnek: Eğer mevcut olan release etiketi "0.1.4" ise bir sonraki "0.2.0" olur. Ortadaki rakam "1" arttırılır ve sondaki ise "0" olarak ayarlanır kısacası yeni release ismi release/0.2.0
olur. Bir sonrakisi ise release/0.3.0
olur.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!
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.
Aktif branch olarak develop
'u seçin.
$ git branch
* develop
master
Tüm yenilikleri alın.
$ git remote update
Fetching origin
Yerel develop
branchı yenileyin.
$ git pull origin develop
From github.com:inanzzz/manual
* branch develop -> FETCH_HEAD
Already up-to-date.
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
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
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
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.
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
Yerel master
branchı yenileyin.
$ git pull origin master
From github.com:inanzzz/manual
* branch master -> FETCH_HEAD
Already up-to-date.
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
Release anını etiketleyin.
$ git tag -a 0.1.0 -m 'Create release tag 0.1.0'
Etiketi kontrol edin.
$ git tag
0.1.0
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
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
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
Release branch ile develop
branchı birleştirin.
$ git merge release/0.1.0
Already up-to-date.
Yerel develop
branchı yayınlayın.
$ git push origin develop
Everything up-to-date
Yerel release branchı silin.
$ git branch -D release/0.1.0
Deleted branch release/0.1.0 (was d99ca8a).
$ git branch
* develop
master
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
Eğer GitHub'a giderseniz, aşağıdaki ifadelerin gerçekleştiğini göreceksiniz.
master
ve develop
branchlar birbirleriyle aynı.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
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