KATEGORI: GIT

Latihan Git: Pengertian, Sejarah, Perbandingan dan Implementasi

Alat untuk melakukan Kontrol Versi dan Manajemen Proyek Aplikasi Perangkat Lunak. Sudah banyak digunakan oleh berbagai perusahaan teknologi yang BESAR.

Do Exploit

--

Thumbnail ni bre!

Dalam bahasa inggris, disebut juga Version Control (lebih familiar di kalangan IT). Terkadang, jika kita kenal sebagai Version Control saja tidak cukup, ini bisa dibilang alat Source Control juga. Karena bukan hanya mengontrol versi dalam software, namun kode sumber juga.

Pengertian Version Control System (VCS)

VCS merupakan sebuah sistem untuk menangani kolaborasi antar Software Engineer dalam mengembangkan proyek aplikasi yang terus berkembang. Banyak sekali keuntungan menggunakan VCS.

Kolaborasi antar Tim Software semakin mudah. Mereka bisa mengerjakan file-file bagian dari kode sumber tanpa mengubah secara paksa kode orang lain.

Anggaplah 2 Software Engineer sedang mengerjakan penambahan fitur pada 1 file yang sama, tentu ada 1 file dengan 2 versi yang berbeda, ketika hasil kode mereka berdua digabungkan, akan muncul peringatan bahwa terjadinya Conflict.

Dari kasus diatas tadi, kita bisa tau siapa sebenarnya yang menambahkan kode pada file yang sedang dikerjakan oleh dia, karena VCS bisa merekam jejak setiap perubahan pada kode. Akhirnya kedua Software Engineer bisa sama-sama mencapai kesepakatan dan melanjutkan pekerjaaannya.

Terdapat kasus lain lagi, setelah banyak proses melakukan perubahan kode. Kalian (Tim IT) memutuskan untuk rilis versi terbaru dari software. Namun, tak disangka-sangka setelah berada di Production, banyak sekali bug sistem yang tak terduga dan tak mungkin selesai cepat.

VCS juga bisa melakukan Roll-Back, sebuah istilah untuk mengembalikan Software ke versi sebelumnya sebagai versi utama lagi.

Ada 2 tipe dari VCS: Distributed dan Centralized.

Distributed Version Control System (DVCS) populer digunakan saat ini. Salah satu alatnya yang populer adalah Git. Berbeda dengan Centralized, sudah tidak banyak digunakan saat ini. Saya akan jelaskan kenapa kalian harus memilih DVCS di akhir nanti.

Sejarah Git

Git merupakan implementasi dari Version Control System. Git dikembangkan oleh Linus Torvalds (Pencipta Linux). Balik ke tahun 2002, Proyek Linux Kernel mulai menggunakan DVCS berbayar yaitu BitKeeper untuk pengembangan proyeknya.

Sayangnya, di tahun 2005 hubungan komunitas pengembang linux dan perusahaan pengembang BitKeeper putus, dan akses penggunaan gratis BitKeeper ditarik.

Hal ini mengharuskan Linus mengembangkan alat DVCS sendiri, berdasarkan pengalaman dan pelajaran selama menggunakan BitKeeper. Dengan tujuan dari sistem terbaru ini yaitu:

  • Kecepatan,
  • Dukungan yang kuat untuk pengembangan yang tidak berjalan satu garis lurus saja, melainkan bercabang atau Non-Linear (Branching),
  • Mampu menangani proyek BESAR seperti Linux Kernel,
  • Sepenuhnya terdistribusi

Sesuaikan OS yang kalian gunakan dan ikuti tutorial installasi Git diatas. Kalau bisa mengikuti saya saja, menggunakan Linux agar pembelajarannya ter-sinkronisasi.

Implementasi Git: Lokal

Anggaplah saat ini kita belum memiliki proyek yang berada dalam lingkup Version Control dengan Git, maka kita harus membuat folder/direktori proyek terlebih dahulu.

$ mkdir Latihan-Git
$ cd Latihan-Git
$ git init

Lihat perintah terakhir yang kalian ketik. Itu berarti kalian telah memutuskan menggunakan direktori Latihan-Git sebagai proyek yang mengadopsi Version Control. Jika kalian ketik ls -a disana, kalian akan melihat sub-direktori .git, dimana direktori tersebut mengandung semua file repositori yang diperlukan.

Anggaplah proyek ini merupakan pembelajaran pertama kalian dengan Python. Disini kalian akan melakukan operasi matematika dasar, seperti penjumlahan, perkalian dan lain-lain dengan Python.

Designed by app.diagrams.net

Membuat file untuk memulai proyek

jumlah.py

def jumlah(num1, num2):    
hasil = num1 + num2
return hasil

kali.py

def kali(num1, num2):
hasil = 1 * num2
return hasil

bagi.py

def bagi(num1, num2):
hasil = num1 / 2
return hasil

Sekarang jika kalian ketik git status, akan muncul sebuah peringatan bahwa ketiga file tersebut berstatus untracked. Artinya ketika sesuatu terjadi pada file-file tersebut, Git tidak punya rekam jejaknya. Let’s track them!

Menambahkan file-file untuk memulai perekaman jejak

$ git add .

. (titik) artinya menambahkan seluruh file yang belum ter-rekam jejak perubahannya.

Saat ini file-file kalian telah berada dalam Staging Area. Tiba saatnya untuk memberikan komentar atas perubahan atau pembuatan kode kalian yang baru tersebut.

Biasanya, karena ini commit pertama kali dan berisi semua file untuk kebutuhan proyek. Kita boleh beri komentar commit sebagai ‘First Commit’.

$ git commit -m "First Commit"

Masuk dalam tahap terakhir, dimana kalian telah memberikan komentar atas perubahan/pembuatan kode.

$ git log --oneline --graph

Perintah diatas menunjukkan rekam jejak yang sudah terjadi sampai saat ini. Lalu untuk mengetahui branch yang kalian gunakan saat ini, gunakan perintah git branch.

Membuat commit ke-2 untuk fix bug

😲 Waduuuh, coba kalian lihat lagi kode di file kali.py dan bagi.py, temukan bugnya!

Pada file kali.py seharusnya bukan hanya angka 1, tetapi itu variabel, yang bernama num1. Sedangkan file bagi.py bukan angka 2, tetapi variabel num2.

Sekarang kita akan melakukan fix bug tersebut. Ubahlah kedua kode dari file tersebut menjadi kode file yang sebenarnya.

kali.py

def kali(num1, num2):
hasil = num1 * num2
return hasil

bagi.py

def bagi(num1, num2):
hasil = num1 / num2
return hasil

Setelah itu kita gunakan gunakan perintah git add . lagi. Untuk menambahkan perubahan kode yang baru saja diperbaiki. Jika kalian ketik git diff, kalian akan ditunjukkan perubahan yang baru saja terjadi antara kode baru di Staging Area dengan letak Commit saat ini.

$ git commit -m 'Fix bug when calculate'

Membuat branch baru untuk menambah fitur

$ git log --oneline --graph

Diatas adalah pohon commit yang terbentuk setelah proses-proses pengembangan kode. Kita akan membuat branch baru, dimana menambahkan batang baru dari pohon commit sebelumnya.

Pada pengembangan baru ini, kita akan menambahkan fitur baru yaitu pengurangan dan pembagian bersisa.

Kenapa kita butuh branch? Kan bisa langsung di branch master?

Saat kita ingin memperbaiki bug, menambahkan fitur, kita perlu merangkumnya dalam branch baru. Jadi branch master, tidak menyimpan semua proses commit yang terjadi. Branch tersebut hanya menyimpan apa yang terjadi pada perubahan kodenya secara garis besar.

$ git branch New-Feature # membuat branch baru
$ git checkout New-Feature # berpindah branch

Jika kalian mengetik perintah git branch saja, bakal muncul 2 branch dan * (bintang) di sebelah kirinya yang berarti branch tersebut sedang kita gunakan.

$ git log --oneline --graph

Kalian juga bisa lihat, perpecahan branch yang terjadi, commit Fix bug when calculate memiliki 2 branch.

Menambahkan fitur baru pada branch

Setelah branch dibuat dan kita telah pindah ke branch tersebut. Sekarang saatnya kita menambahkan 2 fitur baru yang sudah dibicarakan sebelumnya.

bagi_sisa.py

def bagi_sisa(num1, num2):
hasil = num1 % num2
return hasil

kurang.py

def kurang(num1, num2):
hasil = num1 - num2
return hasil

Lalu kita bakal menambahkan pesan commit pada setiap file dengan fitur baru tersebut, sesuai gambaran pohon commit yang dibuat sebelumnya

$ git add bagi_sisa.py
$ git commit -m "Add modulo function"
$ git add kurang.py
$ git commit -m "Add difference function"
$ git log --oneline --graph

Posisi sebelum merger

$ git checkout master
$ ls

🤪 Rasain, file dan fitur yang kalian buat sudah hilaaaang wkwkwkwk!

Sebenarnya tidak, ini karena tambahan kode yang dibuat dalam branch New-Feature belum digabungkan dengan branch master. Lihat lagi pada gambar pohon commit sebelumnya!

$ git checkout New-Feature
$ ls

Muncul lagi deh!

Menggabungkan branch New-Feature dengan master

$ git checkout master
$ git merge --squash New-Feature
$ git status

Kalian bakal mendapatkan peringatan bahwa file-file yang berisi fitur baru tidak terekam jejaknya. Kalo tanpa parameter squash, peringatan tersebut tidak akan muncul. Jadi sebenarnya ada 2 metode merge pada git.

Pertama, merge tanpa menggunakan parameter squash, yang berarti menggabungkan commit yang terjadi pada branch New-Feature juga. Bakal seperti dibawah ini gambar pohon yang terbentuk.

Just merge.

Dimana itu bukan yang kita inginkan. Lalu pada kondisi-kondisi apa saja kita harus menggunakan merge & squash atau merge saja? Akan saya bahas kapan-kapan 😁.

Intinya, merge & squash itu tidak menggabungkan commit pada branch lain, sedangkan merge saja itu menggabungkan commit yang terjadi pada branch lain juga.

$ git add .
$ git commit -m "Merging New-Feature"
$ git log --oneline --graph
Merge & Squash.

Pohon commit yang terbentuk tidak mengandung commit daripada branch New-Feature. Karena commit yang terjadi pada branch New-Feature telah digabungkan menjadi 1 commit baru.

Menghapus branch New-Feature

Dari yang saya dengar-dengar, branch dengan model seperti ini biasanya tidak akan bertahan lama. Paling hanya 1–2 hari saja. Maka anggaplah ini sudah 2 hari, dan fitur tersebut berjalan dengan baik tanpa kesalahan.

$ git branch -D New-Feature

Kita bisa menghapusnya dengan perintah diatas. Jika kalian ketik git branch saja, sudah tidak terdapat branch New-Feature.

Publish Proyek: Online

Anggaplah pengembangan proyek Latihan-Git ini sudah selesai dan kalian ingin melakukan pengembangan lebih lanjut bersama Software Engineer yang lain.

Tentu kita perlu platform yang menyediakan layanan 1 * 24 jam sebagai Repository Server, tempat kita menyimpan kode. Beruntung sudah ada situs website yang melayani kegiatan tersebut secara GRATIS! Yaitu Github!

Github telah diakuisisi oleh Microsoft sejak 3 Juni 2018. Walaupun kita kenal produk-produk microsoft banyak yang berbayar, kita tidak melihat itu disini, Github menyediakan layanan gratis untuk para developer menyimpan kode publik maupun privat dan ter-integrasi dengan Git.

Sungguh terbaeklah kontribusi dari Microsoft ini 🥳.

Ikuti tutorial membuat proyek repository dalam Github menggunakan tutorial diatas. Berikan nama sesuka kalian, yang penting untuk latihan aja. Boleh dihapus sehabis ini kok!

$ git remote add latihan-git https://github.com/<username>/<nama-proyek>

Perintah diatas berarti menambah link repository online yang ter-integrasi dengan Git. Nama latihan-git diatas boleh diganti apa saja, karena itu hanya nama remote repositori saja yang akan disimpan oleh git (sebagai identitas gitu).

$ git remote -v

Perintah diatas menunjukkan list remote repositori online yang sudah ditambahkan.

$ git branch -m master main

Kita perlu mengubah branch master menjadi main. Secara default dalam Git, nama branch yang digunakan adalah master, sedangkan dalam Github defaultnya adalah main. Simak alasannya di artikel bawah ini.

$ git pull --allow-unrelated-histories latihan-git main
$ git push latihan-git main

Gunakan parameter allow-unrelated-histories saat ini saja! Seterusnya tidak perlu gunakan lagi jika tidak perlu.

https://github.com/<username>/<nama-repositori> & https://github.com/<username>/<nama-repositori>/commits

Kongresebesyen bre 👍 kalian telah belajar kontribusi ke komunitas developer se-🌏 dan belajar git juga!

Kenapa memilih DVCS?

Distributed Version Control System (DVCS) mengizinkan kita untuk memiliki salinan repositori dari repositori utama. Dalam kasus ini kamu bukan pembuat repositori, tapi kamu ingin mengembangkan repositori orang lain.

Dimana itu tidak bisa dilakukan oleh (CVCS), setiap perubahan yang terjadi harus pull&push terhadap server repositori.

Setiap developer dalam tim dapat mengatur perubahan kode dalam repositorinya sendiri. Jadi kode yang di dorong ke repositori utama dapat di pastikan hanya kode yang berkualitas.

Fleksibilitas untuk bekerja secara offline. Kalian sudah melihat hal tersebut di bagian Implementasi Git, kita mengatur seluruh alur kerja pengembangan kode dalam repositori lokal saja.

Referensi

--

--

Do Exploit

I share stories about what I've learned in the past and now. Let's connect to Instagram! @do.exploit