> ## Documentation Index
> Fetch the complete documentation index at: https://docs.skanesgalab.my.id/llms.txt
> Use this file to discover all available pages before exploring further.

# Pengenalan Version Control

> Mengenal konsep Version Control System (VCS), contoh nyata, manfaat langsung bagi developer, serta hubungan erat antara Git dan GitHub.

## Apa itu Version Control System (VCS)?

Bayangkan kamu sedang menulis naskah, laporan kerja, atau kode program. Pernahkah kamu menyimpan berkas dengan nama seperti ini di laptopmu?

* `proyek_v1.zip`
* `proyek_v2_edit.zip`
* `proyek_v2_final.zip`
* `proyek_v2_final_beneran_jangan_diubah.zip`

Ketika seminggu kemudian aplikasi tiba-tiba error dan kamu ingin kembali ke versi 3 hari yang lalu, kamu mulai panik karena lupa baris mana yang sempat kamu ubah dan di file zip mana versi yang stabil itu berada.

**Version Control System (VCS)** (Sistem Pengontrol Versi) adalah sebuah perangkat lunak yang bertugas mencatat setiap jejak perubahan (*history*) dari sekumpulan berkas dari waktu ke waktu.

VCS bekerja layaknya **"Mesin Waktu"** sekaligus **"CCTV Digital"** untuk dokumen dan kode program:

* **Merekam Titik Riwayat:** Kamu bisa menandai setiap perkembangan pekerjaan (*checkpoint/commit*) secara rapi.
* **Melihat Perubahan Baris demi Baris:** Kamu bisa melihat siapa yang mengubah, apa yang dihapus, dan apa yang ditambahkan.
* **Kembali ke Masa Lalu:** Jika aplikasi mengalami kerusakan (*error/bug*), kamu dapat dengan aman memulihkan file ke kondisi sebelumnya dalam hitungan detik.

***

## Contoh Nyata Version Control dalam Kehidupan Sehari-hari

Untuk orang awam, konsep VCS sebenarnya sudah sering kita jumpai dalam aplikasi sehari-hari:

1. **Google Docs (Version History):**
   Saat kamu mengetik skripsi bersama teman di Google Docs, kamu bisa membuka menu *Version History*. Di situ tercatat siapa yang mengetik paragraf tertentu pada jam berapa, dan kamu bisa mengklik tombol *"Restore this version"* jika ada teman yang sengaja atau tidak sengaja menghapus teks penting.
2. **Tombol Undo (Ctrl + Z) Super Canggih:**
   Tombol `Ctrl + Z` di laptop hanya berlaku selama aplikasi belum ditutup. Namun dengan VCS, kemampuan "Undo" ini tersimpan selamanya di dalam basis data riwayat, bahkan setelah komputermu dimatikan selama bertahun-tahun.
3. **Save Game (Checkpoint) dalam Game RPG:**
   Sebelum kamu melawan monster *Boss* yang sulit, kamu membuat *Save Point*. Jika tokomu kalah atau salah langkah, kamu tinggal me-*load* save point tersebut tanpa harus mengulang game dari awal level 1.

***

## Mengapa Developer Sangat Membutuhkan Version Control?

Jika tanpa Version Control pekerjaan seorang developer akan sangat berantakan. Berikut perbedaannya dalam dunia kerja nyata:

| Skenario | Tanpa Version Control (Cara Kuno) | Dengan Version Control (Cara Modern) |
| :- | :- | :- |
| **Penyimpanan File** | Mengirim file zip lewat WhatsApp, Flashdisk, atau Google Drive. | Terpusat di repositori dengan kode hash yang jelas dan terstruktur. |
| **Kolaborasi Tim** | Dua orang mengedit file yang sama $\to$ file salah satu orang tertimpa (*overwrite*) dan hilang. | Bekerja di cabang (*branch*) terpisah; perubahan digabung secara otomatis (*merge*). |
| **Pelacakan Bug** | "Siapa yang mengubah baris ini semalam sampai server crash?" (Saling tuduh tanpa bukti). | Terlihat jelas nama pembuat commit, tanggal, dan pesan perubahan (*Git Blame*). |
| **Eksperimen Fitur** | Takut mencoba ide fitur baru karena takut kode yang sudah jalan jadi rusak. | Cukup buat branch baru; jika eksperimen gagal, tinggal hapus cabangnya dengan aman. |
| **Rilis ke Produksi** | Mengunggah file secara manual via FTP (sangat berisiko lupa file penting). | Otomatis terintegrasi dengan pipeline CI/CD untuk deployment instan. |

***

## Apa Hubungan Antara Git dan GitHub?

Banyak orang yang baru mulai belajar sering mengira Git dan GitHub adalah hal yang sama. Padahal, hubungannya diibaratkan seperti **Video dengan YouTube**, atau **MP3 dengan Spotify**.

```mermaid theme={null}
flowchart LR
    subgraph KomputerLokal["Komputer Pribadi Kamu (Offline)"]
        FileCode["File Kode Aplikasi"] --> Git["Git Engine (Mencatat Commit Lokal)"]
    end

    subgraph CloudInternet["Internet / Cloud"]
        GitHub["GitHub (Server Repositori Online)"]
    end

    Git -->|git push (Upload)| GitHub
    GitHub -->|git pull / clone (Download)| Git
```

### 1. Git (Mesin / Engine Lokal)

* Git adalah **alat perangkat lunak (*software*)** yang diinstal di komputer/laptopmu.
* Bekerja secara lokal di terminal/CMD tanpa butuh koneksi internet (*offline*).
* Fungsinya murni mencatat riwayat perubahan file di dalam komputermu sendiri.

### 2. GitHub (Rumah / Platform Cloud di Internet)

* GitHub adalah **layanan berbasis web di internet (*cloud platform*)** untuk menyimpan dan membagikan repositori Git milikmu ke dunia luar.
* Memungkinkan banyak programmer dari berbagai belahan dunia untuk bekerja bersama di proyek yang sama secara *online*.
* Menyediakan fitur pendukung kolaborasi seperti Pull Request (review kode), Issue Tracker (pelaporan bug), Kanban Board, serta otomatisasi pipeline (*GitHub Actions*).

> **Kesimpulannya:**\
> **Git** adalah alat perekamnya (*recorder*), sedangkan **GitHub** adalah wadah online tempat kamu menyimpan dan memamerkan hasil rekamannya ke orang lain!


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.