Cara Melakukan Pull Request di Github dan Sinkronisasi Forked Repository


Kali ini kita akan membahas cara melakukan pull request di github. Pull request ini dilakukan ketika kita ingin berkontribusi dalam suatu project (repository) di github. Kontribusi yang dimaksud adalah menambahkan fitur atau memperbaiki bug/error yang ada pada suatu project.

Sebelum memulai, saya asumsikan teman-teman sudah mengerti sedikit tentang apa itu GIT (version control system), jika belum silakan cek atau baca-baca dulu di artikel berikut: Apa itu Git dan Kenapa Penting bagi Programmer? Tutorial GIT.

Selain itu, teman-teman juga harus punya Akun Github dan sudah login. Jika belum, silakan daftar di webnya (github.com) gratis.

Pastikan juga teman-teman sudah punya target repository atau project yang teman-teman inginkan untuk berkontribusi di dalamnya. Contoh, saya akan menggunakan repository ZeroDevnet/IRS-scraping untuk target repositorynya. Saya akan menambahkan fitur baru atau script baru yang terkait dengan project tersebut yaitu scraping data dari web portal IRS (server pulsa).

Fork Repository

Langkah pertama untuk melakukan pull request adalah melakukan fork repository. Teman-teman buka halaman repository target (contoh: https://github.com/ZeroDevnet/IRS-scraping). Lihat di bagian kanan atas, ada icon fork. Klik icon tersebut.

Penjelasan sedarhananya, fork adalah melakukan copy repository ke akun kita. Perhatikan alamat repositorynya tadi ZeroDevnet/IRS-scraping, sekarang dicopy ke xdnroot/IRS-scraping. ZeroDevnet adalah pemilik asli repository-nya. Sedangkan xdnroot adalah akun saya.

Clone Repository

Langkah berikutnya adalah kita clone repository-nya ke komputer kita. Repository yang kita clone adalah xdnroot/IRS-scraping. Coba klik "Code" dengan icon download berwarna hijau.

Di situ ada 3 cara melakukan clone repository: 1. Menggunakan GIT command (CLI) dengan HTTPS atau SSH. 2. Menggunakan Github CLI. 3. Download ZIP.

Jika mau menggunakan GIT command over HTTPS, teman-teman tinggal jalankan command berikut di komputer teman-teman (pastikan sudah menginstal GIT).

$ git clone https://github.com/xdnroot/IRS-scraping.git

Jika ingin menggunakan GIT command over SSH jalankan command berikut (perlu menambahkan SSH public key komputer kita di akun github kita terlebih dahulu):

$ git clone git@github.com:xdnroot/IRS-scraping.git

Bisa juga menggunakan Github CLI (pastikan sudah menginstal Github CLI):

$ gh repo clone xdnroot/IRS-scraping

Atau teman-teman tinggal download repository-nya dalam bentuk file ZIP. Klik tombol "Download ZIP". Tetapi jika menggunakan donwload ZIP teman-teman harus setting lagi beberpa paremeter seperti remote repository, author, dsb. Jadi saran saya gunakan dua cara sebelumnya (yaitu: git dan github command).

Membuat Branch Baru

Di komputer lokal (komputer teman-teman), pastikan teman-teman sudah berada di directory repository yang tadi diclone.

$ cd IRS-scraping

$ pwd
/home/xdnroot/Documents/git/IRS-scraping

$ ls
get-IRS-token.php  README.md

Buat branch baru dengan command berikut (contoh saya kasih nama branch baru tersebut: future).

$ git branch future

Lalu beralih ke branch baru yang tadi kita buat dengan command:

$ git checkout future
Switched to branch 'future'

Alternatif lain kita bisa langsung membuat branch baru dan beralih ke branch tersebut dengan command:

$ git checkout -b future
Switched to a new branch 'future'

Untuk kembali ke branch sebelumnya (branch master) gunakan command:

$ git checkout master
Tetapi kali ini kita akan aktif di branch baru: future.

Untuk menegecek branch yang sedang digunakan (aktif) bisa menggunakan command git status.

$ git status
On branch future
nothing to commit, working tree clean

Lakukan Kontribusi

Selanjutnya teman-teman bisa mengotak-atik isi filenya untuk memperbaiki bug/error atau menambahkan fitur baru. Contoh, saya akan membuat fitur baru di file baru namanya get-pricelist.php.

Setalah saya mengubah file yang sudah ada atau menambahkan file baru, maka ketika kita jalankan command git status muncul seperti ini. Terlihat file yang kita ubah atau yang kita tambahkan.

$ ls
get-IRS-token.php  get-pricelist.php  README.md
$ git status
On branch future
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        get-pricelist.php

nothing added to commit but untracked files present (use "git add" to track)

Commit

Setalah teman-teman selesai memperbaiki bug/error atau menambahkan fitur baru dan sudah mengujinya. Sekarang kita tambahkan (stage) file yang mengalami perubahan untuk di-commit:

$ git add get-pricelist.php
Atau jika ingin menambahkan semua file langsung, gunakan tanda titik. Otomatis git akan mendeteksi file apa saja yang sudah diubah, ditambahkan, atau dihapus.
$ git add .

Setelah itu kita commit. Parameter -m adalah pesan commit kita, biasanya mendeskripsikan secara singkat apa perubuhan yang sudah kita lakukan.

$ git commit -m "Add new feature: get pricelist."
[future 5b79103] Add new feature: get pricelist.
 1 file changed, 29 insertions(+)
 create mode 100644 get-pricelist.php

Kita cek dulu repository yang ada di komputer lokal kita. Ada repository dengan nama origin yang merujuk ke remote repository yang ada di github (https://github.com/xdnroot/IRS-scraping.git).

$ git remote -v
origin  https://github.com/xdnroot/IRS-scraping.git (fetch)
origin  https://github.com/xdnroot/IRS-scraping.git (push)

Jika menggunakan SSH teman-teman tidak akan ditanya username dan password untuk login github. Tetapi, jika teman-teman menggunakan HTTPS seperti contoh di atas, maka nanti ketika melakukan push akan ditanya username dan password akun github teman-teman. Masukan saja.

Push ke Forked Repository

Selanjutnya kita push local repository (repository yang ada di komputer kita, branch: future) ke remote repository hasil forked tadi yang ada di akun gtihub kita (xdnroot/IRS-scraping branch master).

$ git push origin future
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 879 bytes | 439.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'future' on GitHub by visiting:
remote:      https://github.com/xdnroot/IRS-scraping/pull/new/future
remote:
To https://github.com/xdnroot/IRS-scraping.git

Nanti di repository yang ada di akun github kita otomatis membuat branch baru dengan nama future, selanjutnya saya sebut xdnroot/IRS-scraping:future. xdnroot adalah pemiliknya, IRS-scraping adalah nama repository-nya, future adalah nama branch-nya.

Melakukan Pull Request

Selanjutnya kita lakukan pull request ke project yang sebenarnya yaitu ZeroDevnet/IRS-scraping:master. Di halaman forked repository kita (xdnroot/IRS-scraping), ada notice di bagian atas seperti ini, klik "Compare & Pull request".


Jika tidak ada, teman-teman bisa klik "Pull Request" berikut. Jika ingin membandingkan file yang mengalami perubahan klik "Compare".

Berikutnya kita compare ZeroDevnet/IRS-scraping:master dengan xdnroot/IRS-scraping:future. Nanti akan muncul form seperti ini, isi formnya sesuai keterangan. Kemudian klik "Create pull request".

Selesai, tinggal menungu follow-up dari pemilikk project aslinya. Apakah akan merged (diterima), atau kita diminta memperbaiki lagi, atau diabakaikan, wkwkwk.



Contoh jika sudah merged:

Sampai sini selesai kita sudah berhasil membuat pull request. Tetapi ke depannya jika kita ingin melakukan kontribusi lagi, kita perlu melakukan sinkronisasi.

Tambahan: Sinkronisasi Forked Repository (xdnroot/IRS-secraping) dengan Repository Asli (ZeroDevnet/IRS-scraping)

Di github kita (forked repository) ada dua branch master dan future, branch master adalah duplikat asli dari ZeroDevnet/IRS-scraping:master. Sedangkan branch future adalah duplikat dari hasil modifikasi kita. Sekarang kalau kita cek di repositori asli di ZeroDevnet/IRS-scraping:master sudah ada 4 file, termasuk file baru dari kita (get-pricelist.php) dan file baru dari orang lain (server-irs.txt).

Sedangkan di forked repository (xdnroot/IRS-scraping:master) hanya ada 2 file.

Sekarang kita akan sinkronkan forked repository kita dengan repository yang asli.

Kita kembali ke komputer lokal kita, lalu kita tambahakan repository ZeroDevnet/IRS-scraping sebagai remote repository baru dengan nama "upstream".

$ git remote add upstream https://github.com/ZeroDevnet/IRS-scraping.git

Sekarang kita punya 2 remote repository, origin dan upstream.

$ git remote -v
origin  https://github.com/xdnroot/IRS-scraping.git (fetch)
origin  https://github.com/xdnroot/IRS-scraping.git (push)
upstream  https://github.com/ZeroDevnet/IRS-scraping.git (fetch)
upstream  https://github.com/ZeroDevnet/IRS-scraping.git (push)

Selanjutnya fetch reposiotiry upstream.

git fetch upstream
remote: Enumerating objects: 9, done.
remote: Counting objects: 100% (9/9), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 7 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (7/7), 2.01 KiB | 2.01 MiB/s, done.
From https://github.com/ZeroDevnet/IRS-scraping
   f948200..9664fdb  master     -> upstream/master

Berikutnya, kita merge upstream/master yang tadi kita fetch ke origin/master. Karena tadi kita masih ada di branch future, sekarang kita beralih ke branch master terlebih dahulu.

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

$ ls
get-IRS-token.php  README.md

Lihat, hanya ada 2 file. Sekarang, kita merge.
git merge upstream/master
Updating f948200..9664fdb
Fast-forward
 get-pricelist.php | 29 +++++++++++++++++++++++++++++
 server-irs.txt    |  4 ++++
 2 files changed, 33 insertions(+)
 create mode 100644 get-pricelist.php
 create mode 100644 server-irs.txt

$ ls
get-IRS-token.php  get-pricelist.php  README.md  server-irs.txt

Selanjutnya kita push ke repository origin/master (xdnroot/IRS-scraping:master).

$ git push origin master
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/xdnroot/IRS-scraping.git
   9664fdb..2fcdbeb  master -> master

Nah, sekarang sudah sinkron antara forked repository dan repository asli. Sinkronisasi ini perlu kita lakukan jika ingin melakukan perubahan berikutnya.

Demikian cara melakukan pull request dan sinkronisasi forked repository.

Tags: cara pull request github, cara membuat pull request github, cara melakukan pull request github, cara pull request di github, cara membuat pull request di github, cara melakukan pull request di github, cara berkontribusi di open source, cara berkontribusi di project github, cara berkontribusi di repository github, apa itu pull request, cara melakukan pull request di atas pull request, cara melakukan sinkronisasi forked repository, cara mengupdate forked repository, cara sinkronisasi forked repository github.

Disqus Comments