Skip to content
Rosa Valentine edited this page Sep 9, 2021 · 1 revision

Version Control System

Disclaimer: belajar version control system lebih enak sambil dicobain. Jadi teori di sini secukupnya aja, tapi lebih banyak habiskan waktu untuk coba-coba ya 🚀

VCS Secara Singkat

Dalam mengerjakan sebuah proyek, seringkali kita perlu berkolaborasi. Dibutuhkan sistem pengerjaan yang terstruktur agar kolaborasi memiliki akuntabilitas dan tidak mengakibatkan kesalahan atau bug yang mengganggu jalannya proyek. Kita bisa menggunakan version control system (VCS) untuk manajemen aset-aset proyek seperti source code.

Berikut ini fungsi-fungsi VCS secara lebih lengkap:

  • Kolaborasi
    VCS memungkinkan banyak orang/device mengerjakan satu proyek secara bersamaan. Tiap orang/device punya copy aset-aset proyek sendiri. Saat integrasi dengan master copy diperlukan, barulah dia melakukan staging dan commit pada file-file yang dikerjakan agar master copy juga memiliki versi file yang sama dengannya.
  • Integrasi
    Pengerjaan yang dilakukan masing-masin orang/device tidak saling memengaruhi sampai integrasi/merging dilakukan. Jika ditemukan kesalahan saat integrasi, penentuan versi yang benar dikembalikan kepada orang yang melakukan integrasi.
  • Akuntabilitas
    VCS menyimpan riwayat pengubahan pada proyek, sehingga jika terdapat kesalahan fatal, orang yang memiliki akses ke proyek bisa memilih untuk kembali atau revert ke versi sebelumnya yang belum terdapat kesalahan. Hal ini mudah karena setiap versi pengubahan yang dilakukan dapat diidentifikasi kapan, siapa yang mengubah, dan bagian apa yang diubah.

Secara umum, terdapat dua jenis version control yang dibedakan dari cara versioning-nya, yaitu:

  • Centralized Version Control
    We commit - They update
  • Distributed Version Control
    We commit - We push - They pull - They update

Terdapat beberapa contoh Distributed VCS, seperti Git, Mercurial, dan Subversion. Kita akan lebih banyak membahas Distributed Version Control kali ini, persisnya Git.

Dasar-dasar Git

Three States

Three States

Git memiliki 4 state untuk aset/file proyek:

  • Untracked berarti file tersebut baru ditambahkan atau baru dihapus (di working directory)
  • Modified berarti ada perubahan pada filemu namun kamu belum melakukan commit pada database (di working directory)
  • Staged berarti kamu sudah menandai file yang diubah pada versimu untuk kemudian dilakukan commit (di staging area)
  • Committed berarti data perubahan file telah tersimpan aman pada database lokal (di git directory/repository)

Git Interfaces

Kita bisa menggunakan Git dengan berbagai jenis antarmuka:

  • CLI (Command Line Interface): UNIX shell, Git Bash, Powershell
    \
  • GUI (Graphical User Interface): GitHub Desktop, Sourcetree, VS Code built-in
    \

Pada LBE ini, kita akan coba belajar Git Bash dan GitHub Desktop.

Git, Git Bash, dan Git Bash Terminal di VS Code

  1. Download Git dan Git Bash di http://git-scm.com/download
  2. Konfigurasi dan install (stepnya cukup banyak, bisa mengikuti tutorial https://www.niagahoster.co.id/blog/git-tutorial-dasar/)
  3. Buka VS Code, tekan Ctrl + `
  4. Di dropdown jenis terminal (kanan atas), pilih Git Bash

GitHub Desktop

  1. Download GitHub Desktop di https://desktop.github.com/
  2. Lakukan instalasi
  3. Autentikasi akun GitHub-mu dengan memilih File > Options > Accounts > Sign in > Sign in using your browser

Git SSH

Versioning di Git

Inisialisasi Repository

Secara lokal, repository bisa kita inisialisasi dengan menjalankan:

git init
git add .
git commit -m "Initialize project"

Menambah Remote Repository

Setelah membuat repository lokal, kita bisa menambah remote repository yang tersimpan di cloud agar menjadi rujukan bagi repository lokal.

git remote add [nama pendek] [url git]

Biasanya kita menambah remote origin dari sebuah repository, sehingga command di atas menjadi seperti berikut: git remote add origin [url].

Untuk melihat remote apa saja yang ada, jalankan perintah ini:

git remote -v

Duplikasi Repository

Untuk membuat local copy dari remote repository yang sudah ada sebelumnya, kita bisa menggunakan git clone. Command ini akan membuat sebuah direktori baru untuk repository yang di-clone di lokal, mengisi direktori tersebut dengan direktori .git dan aset-aset repository yang ada sesuai dengan versi pad saat git clone dilakukan.

git clone [url git]

Remote Branches

Setiap remote repository memiliki remote branch. Sebagai contoh, setelah kita duplikasi repository, kita bisa melihat semua remote branches dengan menjalankan perintah:

git branch -a

Remote branches bukanlah branch yang kita miliki di local. Agar kita juga memiliki local copy dari tiap remote branch, kita bisa menjalankan perintah:

git checkout [nama branch yang ingin dibuat local copy-nya]

Perintah di atas akan secara otomatis membuat local copy berdasarkan remote branch dengan nama yang sama.

Branching

Lebih lanjut lagi tentang branch, branching adalah membuat cabang dari repository utama (master) dan melanjutkan melakukan pekerjaan pada cabang yang baru tersebut tanpa perlu khawatir mengacaukan yang utama.

Untuk menambah branch baru, kita bisa jalankan perintah ini:

git branch [nama branch]

Untuk berpindah branch, kita bisa menggunakan perintah di bawah ini:

git checkout [nama branch]

Untuk melihat branch apa saja yang ada pada local repository, lakukan perintah ini:

git branch -v
git branch -a (juga menampilkan remote branches, lebih lengkap)

Merging

Merging memungkinkan kita mensinkronkan satu branch dengan branch lainnya. Apabila terdapat conflicting changes, Git akan stop proses merging dan mengembalikan ke kita untuk mengambil tindakan atau melakukan fix dengan memilih salah satu versi dari conflicting change tersebut atau menghapus keduanya.

Sebagai contoh, untuk melakukan merge branch feature-a dengan master, kita perlu melakukan:

git checkout master
git merge feature-a

Latihan

  1. Clone repository ini (https://github.com/wiliamhw/LBE-Alpro-2021)
  2. Buat branch baru, namakan dengan namamu
  3. Tambah file project LBE-mu
  4. Lakukan commit dan push ke origin/branch-mu