Pull Request: Bagaimana Merge berlaku di Github
Pull Request: How merging Happened in Github
Pengenalan
Merge
adalah sebuah tindakan dimana git
akan menggabungkan commit
yang telah dibuat menjadi satu commit
yang baharu pada hujung (tip) sesebuah git history.
Jika di lokal, kita boleh melakukan git merge
untuk mencantumkankan commit
daripada feature_branch
kepada main_branch
. Namun, ia sedikit berbeza apabila kita ingin melakukannya pada penyedia cloud hosting seperti Github.
Terdapat dua keadaan yang membezakan cara untuk merge commit
di Github.
Keadaan Branch tidak dilindungi
Keadaan Branch dilindungi
Branch tidak dilindungi
Sebuah branch yang tidak dilinduingi bermaksud branch tersebut tidak termaktub kepada peraturan-peraturan tertentu yang boleh di buat pada Github. Misalnya branch ini membenarkkan sesiapa sahaja untuk di- merge
kepada dan juga daripada mana-mana feature branch yang ada.
Untuk branch jenis ini, kita boleh sahaja membuat commit dan merging seperti biasa di lokal kemudian push ke Github.
# pastikan berada di main branch
$ git checkout main
# commit sesuatu perubahan
$ git checkout -b feature_1
$ git add .
$ git commit -m "commit pertama"
# push branch ke remote
$ git push --set-upstream feature_1 origin
# proses merge
$ git checkout main
$ git merge feature_1
# push ke remote github
$ git push
Selepas menjalankan command diatas, kita akan mendapati main
branch pada remote telah dikemaskini daripada feature_1
branch. Proses merging
telah berjaya tanpa melibatkan penggunaan UI di Github (iaitu Pull Request atau PR)
Branch dilindungi
Sebaliknya, jika branch tersebut dilindungi; yakni terdapat peraturan yang telah ditetapkan supaya pengaturcara tidak boleh sewenang-wenangnya merge
dan push
daripada branch lain seperti yang berlaku keadaan branch tidak dilindungi. Disebabkan ia dilindungi, maka cara yang ditunjukkan pada keadaan pertama tidak dapat dilakukukan.
Ini keraana atas sebab peraturan yang telah ditetapkan, Github akan menghalang daripada pengguna untuk push
commit tersebut melaikan ia melepasi pertaturan yang telah ditetapkan.
Kebiasaannya branch dilindungi akan mempunyai lapisan dibawah
Code review — kod akan disemak oleh ahli projek dan menunggu untuk approval
Code testing — Kod akan melalui testing (unit test, etc) yang telah ditetapkan dalam Git Actions.
Maka, apakah langkah untuk melakukan merge
kepada main
branch supaya anda boleh mengemaskini/menambah kod baru kepada projek anda untuk keadaan ini?
Kita perlu melakukan apa yang dinamakan sebagai Pull Request.
Pull Request
Proses Pull Request (PR) adalah seperti berikut:
- Buat commit seperti biasa
# Cipta branch baharu
$ git checkout -b my_branch
$ git push --set-upstream my_branch origin
$ git add .
$ git commit -m "menambah sesuatu"
Github akan mengeluarkan notifikasi mengenai commit yang telah berlaku dengan butang pull request. Tekan butang pull request tersebut.
(Jika tidak ada notifikasi tekan pull request pada projek repo anda di Github dan tekan Create new pull request.)
Setelah menekan Pull request, Github akan memaparkan Compare change dan kita perlu memilih
Compare branch (feature branch)
Base branch (main branch)
Pilih
my_branch
sebagai compare, danmain
sebagai base untuk kita mergemy_branch
kepadamain
.Selepas itu Github akan memaparkan seksyen dimana jika kod anda melepasi testing dan juga kod anda perlu melalui code review (approval boleh dibuat oleh sesiapa sahaja yang terlibat dalam projek, atau orang tertentu.)
Selepas Approve dan Submit review diberikan oleh pengaturcara lain, maka kod anda telah bersedia untuk dicantukan kepada base branch yang telah ditetapkan.
Tekan Merge pull request dan kod akan dicantumkan. Siap!
Mengapa perlu sedemikian?
Anda sedia maklum bahawa penggunaan Git dapat membantu projek yang besar dan melibatkan ramai pengaturcara. Github telah menjadi sebuah tempat dimana sumber kod disimpan dan digunakan untuk tujuan deployment. Maka amat mustahak kod-kod ini dijaga dan dilindungi daripada sebarang kesilapan dan masalah yang boleh menyebabkan kod-kod legasi tadi mengalami ralat.
PR secara tidak langsung mencipta satu lapisan (boleh jadi beberapa lapisan) yang menjadi penghalang sebelum sesebuah feature atau penambahan berlaku ke dalam kod yang asal.
Dalam code review, pengaturcara lain boleh menyemak struktur kod tersebut samada boleh diterima, tidak baik atau memerlukan penambah baikan. Disini juga pengaturcara boleh mengkritik mengenai kod yang ditulis sekaligus menjadi tempat perbincangan.
Code testing pula boleh di setup bagi memeriksa kod yang ditulis seperti, memenuhi kriteria cara penulisan kod untuk projek tersebut, atau menyemak samada kod tersebut tidak terdedah kepada penyelewengan dan sebagainya.
Anda boleh menetapkan peraturan-peraturan sesebuah branch di Setting dan pilih Branch untuk menentukan bagaimana branch tersebut dilindungi.
Sekian itu saja daripada saya. Cuba lakukan PR anda sendiri dan komen jika artiken ini membantu. Selamat mencuba.