16/04/2016 - GIT
Feature branch uygulamaya yeni özellikler kazandırmak, mevcut olan özellikleri kaldırmak veya hatalı çalışanları düzeltmek için kullanılılar. Bu yapılanlar daha sonradan bir sonraki release ile yayınlanırlar. Feature branch sadece develop
ile birleştirildiği için, yerel ve uzak master
branch her zaman geri kalır.
develop
branchtan türerler.develop
branch ile birleşirler.feature/xxx-xxx-xxx
kullanılır. Örnek: feature/hello-world
Feature 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.
Ana olarak origin/develop
branchı takip edecek şekilde yarat.
$ git checkout -b feature/hello-world origin/develop
Branch feature/hello-world set up to track remote branch develop from origin.
Switched to a new branch 'feature/hello-world'
$ git branch
develop
* feature/hello-world
master
Varsayalım ki bir takım işler yapıp commit ile işlemi sonlandırdınız.
$ echo 'feature/hello-world' > one.txt
$ git add --all
$ git commit -m 'Feature hello-world commit'
[feature/hello-world 47645b3] Feature hello-world commit
1 file changed, 1 insertion(+)
create mode 100644 one.txt
Bir "pull request" yaratmak için yayınlayın.
$ git push origin feature/hello-world
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 313 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:inanzzz/manual.git
* [new branch] feature/hello-world -> feature/hello-world
GitHub'a gittiğinizde, yayıladığınız feature 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ı develop
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, "Merge pull request" buton ile "pull request" develop
ile birleştirilir ve "Delete pull request" butonu ile silinir. Eğer aksi bir durum söz konusu olursa, gerekli düzeltmeleri yapmak zorunda kalırsınız. Varsayalım ki herşey yolunda gitti ve de işlemi sonlandırdınız ama bu sadece GitHub üzerinde gerçekleşti. Bir sonraki yapmamız gereken, yerel develop
branchı yenilemek olacak.
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
feature/hello-world
master
GitHub'ta yaptığınız gibi feature branchı silin.
$ git branch -D feature/hello-world
Deleted branch feature/hello-world (was 47645b3).
$ git branch
* develop
master
Doğrulamak amacıyla bakarsak, aşağıda da gördüğümüz gibi yerel develop
branch henüz yeniliklere sahip değil. Yukarıda da belirttiğimiz gibi, birleştirme işlemi sadece GitHub içinde gerçekleşti.
$ git branch -avv
* develop e0d2b2e [origin/develop] Very first commit
master e0d2b2e [origin/master] Very first commit
remotes/origin/develop e0d2b2e Very first commit
remotes/origin/feature/hello-world 0dacd74 Feature hello-world commit
remotes/origin/master e0d2b2e Very first commit
Tüm yenilikleri alın.
$ git remote update
Fetching origin
remote: Counting objects: 1, done.
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (1/1), done.
From github.com:inanzzz/manual
e0d2b2e..b326329 develop -> origin/develop
Yerel develop
branchı yenileyin.
$ git pull origin develop
From github.com:inanzzz/manual
* branch develop -> FETCH_HEAD
Updating e0d2b2e..b326329
Fast-forward
one.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 one.txt
Doğrulamak amacıyla bakarsak, aşağıda da gördüğümüz gibi yerel develop
branch artık tüm yeniliklere sahip.
$ git branch -avv
* develop b326329 [origin/develop] Merge pull request #1 from inanzzz/feature/hello-world
master e0d2b2e [origin/master] Very first commit
remotes/origin/develop b326329 Merge pull request #1 from inanzzz/feature/hello-world
remotes/origin/feature/hello-world 0dacd74 Feature hello-world commit
remotes/origin/master e0d2b2e Very first commit
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 feature branch that tracks origin/develop
git checkout -b feature/hello-world origin/develop
# 5. Did some dummy work
echo 'feature/hello-world' > one.txt
git add --all
git commit -m 'Feature hello-world commit'
# 6. Pushed feature branch to remote repository
git push origin feature/hello-world
# 7. Opened a "pull request" in GitHub for "peer review"
# 8. Merged and deleted feature branch in GitHub
# 9. Checked out into develop branch
git checkout develop
# 10. Delete local feature branch
git branch -D feature/hello-world
# 11. Fetched all remote updates
git remote update
# 12. Update local develop branch wit remote copy
git pull origin develop