16/04/2016 - GIT
Hotfix branch daha önceden release ile yayınlanan ve hatalı çalışan programları veya özellikleri düzeltmek için yaratılırlar. Hotfix ve release branch arasındaki ana fark, hotfix master
branchtan türer ve develop
branch içindeki herşeyi göz ardı eder (yeni özellikler, yeni dosyalar, kaldırılan zellikler vs). Hotfix işlemi bittince, yapılan düzeltmeler hem develop
hem de master
brancha yansıtılır. Aşağıda bunu göreceğiz.
master
branchtan türerler.develop
hem de master
branch ile birleşirler.hotfix/x-x-x
kullanılır. Format x[major release]-x[release]-x[hot-fix]
hotfix etiketini temsil eder. Örnek: Eğer mevcut olan hotfix etiketi "0.1.4" ise bir sonraki "0.1.5" olur. Sadece sondaki rakam "1" arttırılır, kısacası yeni hotfix ismi hotfix/0.1.5
olur. Bir sonrakisi ise hotfix/0.1.6
olur.Hotfix 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.
Release brancha ait olan 0.1.0
etiketini yayınladıktan sonra, bir kaç gün sonra develop
branchta bir takım değişiklikler yaptık. Bu şu ana kadar normal. Aniden 'one.txt' ismindeki dosyada yanlışlık olduğunu farkettim ve bunu acilen düzeltmem lazım.
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.
Aktif branch olarak master
'ı seçin.
$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
Yerel master
branchı yenileyin.
$ git pull origin master
From github.com:inanzzz/manual
* branch master -> 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 af6ea41 [origin/develop] Feature hello-mars commit
* master 8aa2add [origin/master] I merged release 0.1.0
remotes/origin/develop af6ea41 Feature hello-mars commit
remotes/origin/master 8aa2add I merged release 0.1.0
Yukarıda gördüğümüz gibi, release etiketi 0.1.0*
'dan hemen sonra bir takım işlemler yapıldığını görebiliyoruz. Bu daha sonra develop
branch ile birleştirilmiş ama hotfix bunu kaale almayacak.
Hotfix branchı başlat.
$ git flow hotfix start 0.1.1
Switched to a new branch 'hotfix/0.1.1'
Summary of actions:
- A new branch 'hotfix/0.1.1' was created, based on 'master'
- You are now on branch 'hotfix/0.1.1'
Follow-up actions:
- Start committing your hot fixes
- Bump the version number now!
- When done, run:
git flow hotfix finish '0.1.1'
Aşağıda da gördüğümüz gibi hotfix branch ana olarak master
branchtan türemiş durumda.
$ git branch -avv
develop af6ea41 [origin/develop] Feature hello-mars commit
* hotfix/0.1.1 8aa2add I merged release 0.1.0
master 8aa2add [origin/master] I merged release 0.1.0
remotes/origin/develop af6ea41 Feature hello-mars commit
remotes/origin/master 8aa2add I merged release 0.1.0
Hataları düzeltip commit işlemi gerçekleştirin.
$ cat one.txt
feature/hello-world
$ echo 'feature/hello-inanzzz' > one.txt
$ git add --all
$ git commit -m 'I just fixed a bug'
[hotfix/0.1.1 2a0bb96] I just fixed a bug
1 file changed, 1 insertion(+), 1 deletion(-)
$ cat one.txt
feature/hello-inanzzz
Bir "pull request" yaratmak için yayınlayın.
$ git flow hotfix publish 0.1.1
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 316 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:inanzzz/gitflow.git
* [new branch] hotfix/0.1.1 -> hotfix/0.1.1
Branch hotfix/0.1.1 set up to track remote branch hotfix/0.1.1 from origin.
Already on 'hotfix/0.1.1'
Your branch is up-to-date with 'origin/hotfix/0.1.1'.
Summary of actions:
- The remote branch 'hotfix/0.1.1' was created or updated
- The local branch 'hotfix/0.1.1' was configured to track the remote branch
- You are now on branch 'hotfix/0.1.1'
GitHub'a gittiğinizde, yayıladığınız hotfix branch için bir tane "pull request" açmanızı isteyen ibare göreceksiniz. Açmak işlemi sırasında, karşılaştırılacak olan branchı master
olarak seçin ve daha sonra başlık ve açıklamayı yazarak işlemi sonlandırın.
Bu aşamada diğer takım üyeleri yapılan işi gözden geçirmek için "pull request" ile ilgilenirler. Eğer herkes yaptığınız işten memnun ise, endişelenecek bir durum olmaz. Eğer aksi bir durum söz konusu olursa, gerekli düzeltmeleri yapmak zorunda kalırsınız.
$ git branch -avv
develop af6ea41 [origin/develop] Feature hello-mars commit
* hotfix/0.1.1 2a0bb96 [origin/hotfix/0.1.1] I just fixed a bug
master 8aa2add [origin/master] I merged release 0.1.0
remotes/origin/develop af6ea41 Feature hello-mars commit
remotes/origin/hotfix/0.1.1 2a0bb96 I just fixed a bug
remotes/origin/master 8aa2add I merged release 0.1.0
Hotfix branchı sonlandırın.
$ git flow hotfix finish 0.1.1
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
Merge made by the 'recursive' strategy.
one.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Switched to branch 'develop'
Your branch is up-to-date with 'origin/develop'.
Merge made by the 'recursive' strategy.
one.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
To git@github.com:inanzzz/gitflow.git
- [deleted] hotfix/0.1.1
Deleted branch hotfix/0.1.1 (was 2a0bb96).
Summary of actions:
- Hotfix branch 'hotfix/0.1.1' has been merged into 'master'
- The hotfix was tagged '0.1.1'
- Hotfix tag '0.1.1' has been back-merged into 'develop'
- Hotfix branch 'hotfix/0.1.1' has been locally deleted; it has been remotely deleted from 'origin'
- You are now on branch 'develop'
Aşağıda gördüğümüz gibi, yerel branchlar uzak branchlardan daha ileride bu nedenler bir sonraki adımlarda yerel branchları yayınlayacağız.
$ git branch -avv
* develop 4ef055f [origin/develop: ahead 3] I merged hotfix 0.1.1
master 158948f [origin/master: ahead 2] I merged hotfix 0.1.1
remotes/origin/develop af6ea41 Feature hello-mars commit
remotes/origin/master 8aa2add I merged release 0.1.0
Yerel develop
branchı yayınlayın.
$ git push origin develop
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 695 bytes | 0 bytes/s, done.
Total 6 (delta 2), reused 0 (delta 0)
To git@github.com:inanzzz/gitflow.git
af6ea41..4ef055f develop -> develop
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
8aa2add..158948f master -> master
Etiketi kontrol edin.
$ git tag
0.1.0
0.1.1
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), 180 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:inanzzz/gitflow.git
* [new tag] 0.1.1 -> 0.1.1
Mevcut olan git durumunu kontrol et. Herşey yolunda gitmiş gibi görünüyor!
$ git branch -avv
* develop 4ef055f [origin/develop] I merged hotfix 0.1.1
master 158948f [origin/master] I merged hotfix 0.1.1
remotes/origin/develop 4ef055f I merged hotfix 0.1.1
remotes/origin/master 158948f I merged hotfix 0.1.1
Eğer GitHub'a giderseniz, aşağıdaki ifadelerin gerçekleştiğini göreceksiniz.
master
ve develop
branchlar birbirleriyle aynı değil.Yayınlama işlemi yaparken, aktif branch olarak etiketi seçip, onu yayınlamalısınız.
$ git remote update
$ git checkout 0.1.1
$ git pull origin 0.1.1
$ 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. Checked out into master branch
git checkout master
# 5. Update local master branch with remote copy
git pull origin master
# 6. Created a hotfix branch that tracks master
git flow hotfix start 0.1.1
# 7. Did some fixes and committed to it
# 8. Published hotfix branch to remote repository
git flow hotfix publish 0.1.1
# 9. Opened a "pull request" in GitHub for team to verify the hotfix
# 10. Finished hotfix branch
git flow hotfix finish 0.1.1
# 11. Push develop branch
git push origin develop
# 12. Push master branch
git push origin master
# 13. Pushed the tags to remote repository
git push origin --tags