Git: Tool Wajib bagi Programmer

Pande Ketut Cahya Nugraha
pepeel
Published in
6 min readFeb 24, 2020

Apa itu Git?

Logo dari Git semenjak tahun 2012.

Software Engineer bisa dikatakan sebagai makhluk yang sosial, walau sering digambarkan sebagai orang-orang anti-sosial dalam memes atau lawakan di internet. Pengembangan perangkat lunak dalam skala besar jarang bisa dilakukan sendirian, sehingga software engineer harus berkolaborasi dalam pengembangan. Karena itu, diperlukan suatu tool yang mampu mengintegrasikan pekerjaan masing-masing software engineer menjadi suatu kesatuan yang utuh tanpa konflik.

Git adalah salah satu tool yang secara de-facto wajib dikuasai oleh software engineer. Git adalah sebuah distributed version-control system yang berguna untuk melacak perubahan pada kode dalam pengembangan perangkat lunak. Dengan git, software engineer bisa dengan mudah mendistribusikan kode, memungkinkan tiap software engineer untuk mengimplementasikan fitur dan menggabungkannya dengan fitur-fitur yang dibuat rekan-rekannya, serta kembali ke versi-versi lama bila terdapat masalah pada versi kode yang sekarang. Manfaat dari git begitu besar sehingga hampir seluruh pemain dalam industri pengembangan perangkat lunak menggunakannya, sehingga seorang software engineer wajib paham tentang git.

Dasar-dasar Git

Dalam penggunaan git, terdapat beberapa perintah dasar yang wajib diketahui oleh seluruh pengguna git. Berikut akan dijabarkan perintah-perintah dasar tersebut, dan sekaligus kita akan mendalami konsep-konsep dalam git:

  1. git init

git init adalah perintah yang digunakan untuk menginisialiasi git dalam folder kita. Yang dimaksud dengan menginisialiasi adalah memerintahkan git untuk mulai melacak setiap perubahan yang terjadi dalam file yang berada dalam folder tersebut(yang sekarang kita bisa sebut sebagai git repository).

Menginisialiasi git pada folder kosong.

2. git add

git add adalah perintah yang digunakan untuk memasukkan file ke staging area. Dengan memasukkan file ke staging area, berarti kita memastikan bahwa file tersebut perubahannya sudah siap dicatat oleh git ketika kita melakukan git commit.

Melakukan git add ke sebuah file yang siap di commit. Terdapat juga perintah git status yang berfungsi untuk melihat status perubahan file di repository (ada perubahan, siap di commit, dan tidak dilacak)

3. git commit

git commit adalah perintah yang digunakan untuk meng-commit perubahan pada file yang ada di staging area. Ini berarti perubahan tersebut dicatat sebagai sebuah titik atau versi baru, dimana kita bisa kembali ke versi tersebut bila terdapat suatu masalah kedepannya.

Melakukan commit. Opsi -m digunakan untuk menambahkan pesan pada commit tersebut.

4. git branch

git branch adalah perintah melihat, membuat, dan menghapus branch pada git repository. Dengan branch, tiap software engineer dapat mengembangkan fitur mereka tanpa mengganggu software engineer lain. Setelah fitur selesai dikembangkan, tim dapat menggabungkan tiap branch ke satu branch utama (biasanya disebut master) sehingga hasil pekerjaan setiap software engineer dapat menjadi sebuah perangkat lunak yang utuh dan bisa digunakan. Penggabungan branch bisa dilakukan manual dengan perintah git merge, atau melalui fitur merge/pull request yang biasanya disediakan oleh provider git hosting seperti GitLab dan Github.

Ilustrasi branch dalam git, courtesy of Atlassian (https://www.atlassian.com/git/tutorials/using-branches)

5. git checkout

git checkout adalah perintah yang digunakan untuk berganti-ganti branch.

6. git clone

git clone adalah perintah yang digunakan untuk meng-clone repository yang di-publish atau di-host di internet. Dengan meng-clone repository, git akan membuat copy dari repository tersebut di komputer kita, dan nantinya kita bisa mengambil versi baru repository tersebut dengan git pull atau berkontribusi dengan mendorong commit baru ke repository tersebut dengan git push.

Bila anda telah menguasai 10 perintah (6 dalam poin utama+ 4 dalam pembahasan) yang telah disebutkan diatas, maka anda sudah bisa berkolaborasi dengan tim dalam mengembangkan perangkat lunak. Masih banyak perintah-perintah yang lebih advance dari 10 perintah yang disebutkan diatas (seperti git stash, yang digunakan untuk menyimpan untracked changes, atau git rebase, yang digunakan untuk menggabungkan branch tapi tidak dengan merge commit layaknya git merge, melainkan dengan mengubah titik diverge suatu branch ke branch lainnya), dan anda bisa mempelajarinya dari dokumentasi dan resource-resource yang telah ada di internet.

Git dalam Kelompok pepeel | PPL 2020

Dalam kelompok kami, kami juga menggunakan git untuk dapat berkolaborasi secara efisien. Repository kami di-host oleh gitlab.cs.ui.ac.id. Untuk penggunaan git dalam PPL 2020, sudah diberikan beberapa aturan penting sebagai berikut:

  • Terdapat branch master yang berisikan kode siap deploy ke production.
  • Terdapat branch staging yang berisikan kode hasil seluruh pekerjaan software engineer.
  • Terdapat branch PBI yang berisikan kode implementasi satu fitur yang dijabarkan pada Product Backlog Items.
  • Terdapat branch hotfix yang digunakan untuk memperbaiki bug yang muncul pada master.
  • Terdapat branch coldfix yang digunakan untuk melakukan rollback (menghapus semua perubahan dari semua cabang product backlog item) bila terdapat fitur yang ditolak oleh product owner.
  • Commit message yang mendeskripsikan apa yang dikerjakan dalam commit tersebut dan diawali dengan tag [RED], [GREEN], [REFACTOR] sesuai fase-fase TDD bila yang dikerjakan merupakan implementasi kode, atau tag [CHORES] bila yang dikerjakan tidak berhubungan dengan implementasi kode seperti membuat README.

Berikut merupakan flow atau alur penggunaan git oleh kelompok kami:

  1. Untuk tiap PBI yang akan dikerjakan dalam sprint, buat branch baru yang berasal dari staging.
  2. Untuk tiap task yang merupakan bagian dari suatu PBI, software engineer yang bertanggung jawab terhadapt task tersebut membuat branch task dari branch PBI yang bersangkutan. Hal ini tidak sebutkan dalam Panduan Git PPL 2020, namun kami melakukan ini dengan tujuan agar tiap software engineer tidak “menginjak kaki” rekan-rekannya saat mengimplementasikan fitur.
  3. Melakukan commit untuk implementasi dengan message sesuai aturan.
  4. Push commit tersebut ke branch task.
  5. Bila task sudah selesai, lakukan merge request ke branch PBI. Merge request akan di-review oleh rekan lainnya. Bila terdapat kekurangan atau improvement yang bisa dilakukan, rekan-rekan akan berkomentar di sana. Bila telah disetujui oleh minimal 2 rekan lainnya, branch task bisa di-merge ke branch PBI.
  6. Bila semua task untuk suatu PBI telah di-merge ke branch PBI, branch PBI bisa di-merge dengan branch staging.
  7. Isi dari branch staging akan dipresentasikan saat sprint review ke product owner, dan bila disetujui, akan di-merge ke branch master.

Contoh flow git dari awal sampai merge request:

Sekarang saya akan memberikan contoh perjalanan dari awal mengambil suatu issue sampai merging merge request ke staging.

  1. Pertama, saya akan mengambil sebuah issue di GitLab board. Untuk contoh ini, saya mengambil issue yang kami kategorikan sebagai bug.

2. Membuat branch baru dari staging. Untuk bug yang muncul di staging, nama branch kami berikan prefix “fix”.

3. Mulai koding dengan membuat/memperbaiki test dan membuat/memperbaiki implementasi. Karena ini adalah bug, test harus diubah untuk mengakomodir skenario yang menyebabkan bug, lalu implementasi diperbaiki. Hasil lalu di commit.

Menambah commit [RED].
Melakukan push ke branch baru.
Terlihat bahwa commit memang benar [RED], yaitu gagal dalam menjalani test karena implementasi belum dibuat.
Melakukan commit [GREEN], yaitu implementasi kode yang berhasil melewati test.
Di CI/CD GitLab juga telah passed.

4. Membuat Merge Request. Disini rekan-rekan setim bisa mereview pekerjaan saya, dengan menambahkan komen bila ada yang dirasa salah atau kurang.

Merge Request yang saya buat.

Saya akan menggunakan Merge Request lain untuk contoh-contoh selanjutnya.

Contoh review dari rekan setim di Merge Request.
Setelah di approve oleh minimal 2 orang, Merge Request bisa di merge.

--

--