Version Control, Team Coding, Git Flow.

Ilham Darmawan
PPL D7 — Fasilkom UI
6 min readFeb 27, 2019
Gambar tombol control

Apa itu Version Control? Apa kegunaannya?

Version control adalah suatu sistem yang menyimpan history perubahan pada sebuah atau sekumpulan file sehingga dapat dilihat lagi pada lain waktu. Salah satu aplikasi yang menerapkan konsep ini adalah Google Docs (pastinya tahu kan kalau ada fitur history ??). Implementasi version control sendiri paling umum pada dunia software development. Berikut ini contoh version control system:

  • Git
  • Apache Subversion
  • Mercurial

Nah, dari ketiga version control system tersebut, kita akan fokus kepada Git karena itu yang sering kita pakai kan? Iya betul! Oke siap, nah dari version control git sendiri terdapat beberapa layanan hosting sebagai berikut:

  • Bitbucket
  • Gitlab
  • Github
  • Beanstalk
  • Codebase

Setelah kita mengetahui kulit luar dari version control, mari kita menyelam lebih dalam ke salah satunya, yaitu Git.

Menyelam lebih dalam

Perintah-perintah dalam Git

Untuk mengoperasikan Git, kita perlu mengetahui beberapa instruksi yang penting agar fungsi dari version control system sendiri dapat dirasakan dan dapat berperan secara optimal. Sebelum masuk ke bagian perintah, terdapat beberapa istilah, yaitu local yang berarti laptop atau PC kita dan remote yang berarti online repository kita yang terdapat di version control hosting seperti Gitlab.

  • Push: perintah ini berfungsi untuk menyimpan perubahan yang kita lakukan pada local ke remote untuk disimpan version history-nya. Nah version history ini yang nanti kita lihat apabila kita ingin tahu perubahan apa saja yang sudah kita lakukan.
  • Pull: command ini berfungsi untuk menarik perubahan dari remote ke local kita. Hal ini biasanya berguna apabila terdapat teman kita yang melakukan push ke repository tersebut baru-baru ini dan kita ingin melihat perubahan tersebut pada local kita.
  • Clone: perintah ini seperti meng-copy file dari repository kita ke local. Perintah ini sangat berguna khususnya apabila kita ingin bergabung ke repository orang dan ingin mengerjakan perubahan pada file yang ada di repository tersebut atau ketika kita berpindah laptop atau PC jadi kita tidak perlu lagi menggunakan flashdisk atau semacamnya.
  • Branch: perintah ini biasanya adalah untuk membuat branch baru. Nah ada istilah baru lagi nih, branch yang dimaksud disini adalah seperti pointer pada salah satu dari kumpulan commit. Apabila kita pertama kali membuat repo (repository) akan diberikan branch master secara default. Lalu kita dapat membuat branch baru apabila ingin melakukan perubahan yang tidak kita inginkan saat ini pada current branch. Perintah ini juga bisa dilakukan untuk melihat branch saat ini.
Merge, sumber: https://www.atlassian.com/git/tutorials/using-branches/git-merge
  • Merge: perintah ini berfungsi untuk menggabungkan branch. Nah, apabila sebelumnya kita membuat branch baru untuk menghindari perubahan kita buat agar tidak “merusak” file yang ada, sekarang jika kita sudah yakin perubahan tersebut sudah final, kita dapat menggabungkan branch tersebut ke branch awal. Gambarnya bisa dilihat di atas.
Rebase, sumber: https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase
  • Rebase: perintah ini berfungsi untuk memindahkan atau menggabungkan urutan commit ke base commit yang baru. Tujuannya adalah mempertahankan linearitas dari susunan commit tersebut (biar tidak seperti mie goreng). Gambarnya bisa dilihat di atas mas/mbak.
  • Revert: perintah ini berfungsi untuk melakukan undo suatu commit. Akan tetapi, tidak melakukan reset dengan menghapus commit saat ini, melainkan membuat commit baru. Hal ini supaya perubahan dapat dilihat agar tidak ribet melihatnya, mantan aja bisa dilihat perubahannya, masa commit gabisa dilihat perubahannya. Berikut ini syntax dan contoh penggunaannya
  • Stash: perintah ini biasanya untuk menyimpan perubahan tanpa melakukan commit, jadi semacam dirty state gitu deh. Nah kapan sih biasanya dilakukan? Biasanya ketika kita sedang melakukan perubahan pada suatu branch, kemudian kita ingin pindah ke branch tertentu untuk melihat atau melakukan perubahan juga tanpa melakukan commit pada current branch.
  • Checkout: perintah ini bisa digunakan untuk file, commit, dan branch. Perintah checkout pada branch digunakan untuk pindah branch atau membuat branch baru dan langsung pindah ke branch tersebut. Kemudian pada file, berfungsi untuk meng-update file pada working directory.
  • Remote: perintah ini bisa digunakan untuk melihat daftar shortname dari setiap remote yang sudah dispesifikasikan. Kemudian kita bisa menambah remote baru dengan perintah ini.

Git Flow pada PPL

Pada PPL kali ini, terdapat tiga branch, yaitu branch production, staging, dan user story. Branch production ketika produk sudah selesai dikembangkan. Branch staging ketika backlog sudah disetujui oleh PO. Kemudian yang terakhir branch user story untuk pengembangan pada saat sprint. Saat pengerjaan suatu story, programmer akan push ke branch ini. Apabila user story atau sprint backlog sudah disetujui oleh PO, maka branch user story di-merge ke branch staging.

Lalu pada PPL juga memiliki aturan penamaan branch dan commit. Untuk commit dibedakan menjadi RED, CHORES, GREEN, REFACTOR. Untuk proses merge, dilakukan squash commit agar commit pada branch user story hanya disimpan sebagai satu commit untuk mempermudah hotfix. Hotfix disini adalah proses resolve error ketika terjadi error pada saat merge. Sedangkan, coldfix adalah proses resolve error ketika proses merging dari branch user story ke staging.

Nah sekian individual review saya yang membahas mengenai Git, semoga dapat bermanfaat bagi kalian para pembaca. Sampai ketemu!!

Update 3 Maret 2019

Pada individual review sebelumnya, saya diminta untuk mencoba git stash. Jadi berikut hasil percobaan yang saya lakukan. Jadi ketika saya melakukan development, seringkali saya membuat file baru untuk melakukan debugging dengan memanggil kode yang saya buat. Hal ini saya lakukan agar tidak mengubah struktur kode yang sedang saya kembangkan. Saya menamakan file yang saya buat dengan coba.js. Jadi kurang lebih isi dari coba.js adalah sebagai berikut

Isi dari coba.js

Cukup berantakan bukan? Nah jadi yang saya sedang lakukan adalah memanggil sebuah fungsi parse() dari oftenBoughtParser. Pada suatu hal tertentu, saya ingin menarik perubahan pada remote. Nah seperti yang kita tahu, git tidak mengizinkan untuk adanya unstaged changes ketika kita melakukan pull. Sedangkan saya sendiri tidak menginginkan file saya yang sudah acak-acakan tersebut untuk di-commit disinilah peran stash. Yang saya lakukan adalah memanggil git stash untuk menyimpan perubahan yang saya lakukan tanpa harus melakukan commit.

Instruksi yang dilakukan untuk stashing

Sebelum stash, kita melakukan hal yang sama ketika ingin melakukan commit, yaitu melakukan git add. Kemudian barulah kita menggunakan git stash untuk menyimpan perubahan. Setelah itu, baru deh kita melakukan pull perubahan yang ada. Lalu untuk mengembalikan perubahan tersebut terhadap versi terbaru dapat menggunakan git stash pop. Berikut hasilnya

Perintah git stash pop untuk mengembalikan perubahan

Selanjutnya saya akan berbagi lagi tentang perintah git yang saya sering lakukan, yaitu git reset. Perintah ini biasanya saya lakukan untuk meng-unstage perubahan. Bisa karena kecerobohan saya menggunakan perintah git add . atau karena memang ada perubahan lain yang saya ingin lakukan sebelum melakukan commit tertentu. Sebagai contoh saya melakukan git add . dan tidak sengaja melakukan stage untuk file coba.js

Ups salah

Nah tidak perlu panik, kita hanya perlu melakukan git reset HEAD <nama file>. Atau apabila kita tidak jadi melakukan stage untuk semua file bisa menggunakan titik. Berikut ini contohnya

Solution with git reset

Nah dapat dilihat perubahannya jadi kembali ke unstaged. Jadi tenang deh hidup kalian. Nah sekian update dari post saya untuk membagikan pengalaman saya dengan git dan memenuhi perbaikan individual review. Sampai Jumpa!!

--

--