Developer Tools

Git & GitHub: Version Control untuk Developer IoT

GRATIS

Panduan lengkap menguasai Git dan GitHub β€” dari inisialisasi repositori hingga kolaborasi tim dalam proyek IoT

1. Apa Itu Version Control?

Bayangkan Anda sedang mengerjakan proyek firmware ESP32 untuk sistem monitoring suhu di pabrik. Hari ini Anda menambahkan fitur MQTT, besok Anda mengubah format data sensor, lusa Anda menemukan bug dan ingin kembali ke kode minggu lalu. Tanpa version control, Anda mungkin membuat salinan folder seperti firmware_v1, firmware_v2_final, firmware_v2_final_beneran β€” sebuah mimpi buruk yang tidak terkelola.

Version Control System (VCS) adalah alat yang mencatat setiap perubahan pada kode sumber seiring waktu. Dengan VCS, Anda bisa melihat siapa yang mengubah apa, kapan perubahan terjadi, dan mengapa β€” semuanya tersimpan dalam satu repositori terpusat. Lebih penting lagi, Anda bisa kembali ke versi mana pun kapan saja.

Mengapa Developer IoT Butuh Git?

Keunggulan Penjelasan
Riwayat LengkapSetiap perubahan kode tercatat β€” bisa kembali ke versi sebelumnya kapan saja
Kolaborasi TimBanyak orang bisa bekerja pada proyek yang sama tanpa saling menimpa kode
BranchingBuat fitur baru di branch terpisah tanpa mengganggu kode utama yang sudah stabil
Backup OtomatisRepositori remote (GitHub) menjadi cadangan cloud untuk semua kode Anda
Code ReviewPull request memungkinkan tim meninjau kode sebelum digabung ke produksi
CI/CD IntegrationGitHub Actions bisa otomatis build, test, dan deploy firmware IoT

Git vs Sistem Version Control Lain

Ada banyak VCS yang pernah populer β€” CVS, Subversion (SVN), Mercurial β€” tapi Git kini mendominasi. Git diciptakan oleh Linus Torvalds pada 2005 untuk mengelola kode kernel Linux. Fitur utamanya adalah distributed version control: setiap developer memiliki salinan penuh repositori di komputernya sendiri, termasuk seluruh riwayat.

Aspek Git (Distributed) SVN (Centralized)
ModelSetiap developer punya clone penuhSatu server pusat, client hanya punya snapshot
KecepatanSangat cepat (operasi lokal)Tergantung koneksi ke server
BranchingRingan dan cepatBerat dan lambat
OfflineBisa commit, log, diff tanpa internetButuh koneksi ke server
Platform populerGitHub, GitLab, BitbucketApache Subversion, Assembla
Adopsi industri~95% developer globalLegacy / perusahaan lama
Diagram: Cara Kerja Version Control dengan Git
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    WORKFLOW GIT UNTUK DEVELOPER                  β”‚
β”‚                                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   add    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   commit  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ Working  β”‚ ───────► β”‚  Staging β”‚ ────────► β”‚  Local Repo β”‚ β”‚
β”‚  β”‚ Directoryβ”‚          β”‚  Area    β”‚           β”‚  (.git/)    β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜           β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚       β–²                                               β”‚        β”‚
β”‚       β”‚ checkout                                      β”‚ push   β”‚
β”‚       β”‚                                               β–Ό        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  Merge   β”‚ ◄──────── β”‚  Pull    β”‚ ◄──────── β”‚   Remote    β”‚ β”‚
β”‚  β”‚  Conflictβ”‚           β”‚  Request β”‚           β”‚   (GitHub)  β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2. Git Init & Clone

Sebelum menggunakan Git, pastikan sudah terinstal di sistem Anda. Git tersedia untuk semua platform β€” Windows, macOS, dan Linux.

Instalasi Git

Bash
# Di Ubuntu / Debian
sudo apt update && sudo apt install git -y

# Di Fedora / CentOS
sudo dnf install git -y

# Di macOS (via Homebrew)
brew install git

# Di Windows β€” download installer dari https://git-scm.com
# Atau via winget:
winget install Git.Git

# Verifikasi instalasi
git --version
# Output: git version 2.45.0

Konfigurasi Awal Git

Setelah instalasi, atur identitas Anda. Ini penting karena setiap commit akan mencatat siapa yang membuat perubahan:

Bash
# Konfigurasi nama dan email (global β€” berlaku untuk semua repo)
git config --global user.name "Nama Anda"
git config --global user.email "email@anda.com"

# Set default branch name ke 'main'
git config --global init.defaultBranch main

# Set editor default (opsional)
git config --global core.editor "code --wait"   # VS Code
# git config --global core.editor "nano"         # Nano

# Lihat semua konfigurasi
git config --list
πŸ’‘ Tips

Gunakan --global untuk konfigurasi yang berlaku di semua repositori. Jika ingin konfigurasi berbeda per proyek (misal email kantor vs pribadi), jalankan perintah yang sama tanpa --global di dalam folder proyek tersebut.

2.1 β€” git init: Membuat Repositori Baru

Perintah git init mengubah folder biasa menjadi repositori Git. Perintah ini membuat folder tersembunyi .git/ yang menyimpan seluruh riwayat dan konfigurasi repositori.

Bash
# Buat folder proyek baru
mkdir iot-smart-home && cd iot-smart-home

# Inisialisasi repositori Git
git init
# Output: Initialized empty Git repository in /home/user/iot-smart-home/.git/

# Cek status
git status
# Output: On branch main
#         No commits yet
#         nothing to commit (create files and use "git add" to track)

# Buat file pertama
echo "# IoT Smart Home" > README.md

# Lihat folder .git yang tersembunyi
ls -la .git/
# HEAD, config, description, hooks/, info/, objects/, refs/

2.2 β€” git clone: Mengambil Salinan Repositori

Jika proyek sudah ada di GitHub atau platform lain, Anda tidak perlu membuat dari nol. Gunakan git clone untuk mengunduh salinan lengkap beserta seluruh riwayat:

Bash
# Clone repositori dari GitHub (HTTPS)
git clone https://github.com/Beebane25/iot-smart-home.git

# Masuk ke folder hasil clone
cd iot-smart-home

# Clone ke folder dengan nama berbeda
git clone https://github.com/Beebane25/iot-smart-home.git my-project

# Clone dengan SSH (lebih aman, butuh SSH key)
git clone git@github.com:Beebane25/iot-smart-home.git

# Clone branch tertentu saja
git clone -b develop https://github.com/Beebane25/iot-smart-home.git

# Clone dengan kedalaman terbatas (hemat bandwidth, tanpa full history)
git clone --depth 1 https://github.com/Beebane25/iot-smart-home.git
⚠️ Peringatan

git clone --depth 1 hanya mengambil commit terakhir β€” cocok untuk deployment cepat, tetapi Anda tidak bisa melihat riwayat atau membuat branch dari commit lama. Hindari untuk pengembangan aktif.

3. Staging & Committing

Git memiliki konsep unik bernama staging area (atau index). Ini adalah "ruang tunggu" antara perubahan di working directory Anda dan commit yang tercatat permanen di riwayat. Konsep ini memungkinkan Anda memilih secara presisi perubahan mana yang ingin dimasukkan ke dalam satu commit.

Diagram: Siklus Working β†’ Staging β†’ Commit
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚              SIKLUS KERJA GIT                         β”‚
  β”‚                                                       β”‚
  β”‚  1. Edit file di Working Directory                    β”‚
  β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                          β”‚
  β”‚     β”‚ main.py  (modified)  β”‚                          β”‚
  β”‚     β”‚ sensor.py (new)      β”‚                          β”‚
  β”‚     β”‚ .env     (new)       β”‚   ← file rahasia!        β”‚
  β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                          β”‚
  β”‚                β”‚                                      β”‚
  β”‚  2. git add main.py sensor.py  (pilih file)           β”‚
  β”‚                β–Ό                                      β”‚
  β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                          β”‚
  β”‚     β”‚    STAGING AREA      β”‚                          β”‚
  β”‚     β”‚  βœ… main.py          β”‚                          β”‚
  β”‚     β”‚  βœ… sensor.py        β”‚                          β”‚
  β”‚     β”‚  ❌ .env (diabaikan) β”‚                          β”‚
  β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                          β”‚
  β”‚                β”‚                                      β”‚
  β”‚  3. git commit -m "tambah sensor baru"                β”‚
  β”‚                β–Ό                                      β”‚
  β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                          β”‚
  β”‚     β”‚   LOCAL REPO (.git)  β”‚                          β”‚
  β”‚     β”‚  Commit: a3f7b2c     β”‚                          β”‚
  β”‚     β”‚  Author: Anda        β”‚                          β”‚
  β”‚     β”‚  Message: "tambah    β”‚                          β”‚
  β”‚     β”‚  sensor baru"        β”‚                          β”‚
  β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                          β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

3.1 β€” Menambahkan File ke Staging

Bash
# Cek status β€” lihat file apa saja yang berubah
git status

# Tambahkan satu file ke staging
git add main.py

# Tambahkan beberapa file sekaligus
git add sensor.py config.py

# Tambahkan semua file di direktori saat ini
git add .

# Tambahkan semua file .py saja
git add *.py

# Batalkan staging (unstage) tanpa mengubah isi file
git reset HEAD main.py

# Tambahkan hanya sebagian perubahan dalam satu file (interactive)
git add -p main.py
# Git akan menampilkan setiap chunk perubahan, Anda pilih y/n

3.2 β€” Membuat Commit

Commit adalah "foto" dari isi staging area pada waktu tertentu. Setiap commit memiliki hash unik (SHA-1), pesan deskripsi, dan informasi penulis.

Bash
# Commit dengan pesan
git commit -m "feat: tambah pembacaan sensor DHT22"

# Commit semua file yang sudah ter-track (sudah pernah di-add)
git commit -am "fix: perbaiki format data suhu"

# Catatan: -am TIDAK berlaku untuk file baru yang belum pernah di-add

# Commit dengan pesan panjang (buka editor)
git commit

# Amend β€” ubah commit terakhir (pesan atau isi)
git commit --amend -m "feat: tambah pembacaan sensor DHT22 + BME280"

3.3 β€” Menulis Pesan Commit yang Baik

Pesan commit yang jelas adalah investasi untuk masa depan β€” termasuk untuk diri Anda sendiri 6 bulan ke depan saat lupa apa yang sudah diubah. Berikut konvensi yang umum digunakan:

Prefix Kegunaan Contoh
feat:Fitur barufeat: tambah monitoring suhu via MQTT
fix:Perbaikan bugfix: handle error koneksi broker putus
docs:Dokumentasidocs: update README dengan cara instalasi
refactor:Restruktur kode tanpa ubah fungsirefactor: pisah modul sensor ke folder tersendiri
chore:Tugas pemeliharaanchore: update dependencies ke versi terbaru
test:Tambah atau ubah testtest: unit test untuk fungsi baca suhu

3.4 β€” Melihat Riwayat Commit

Bash
# Lihat log commit
git log

# Log ringkas satu baris per commit
git log --oneline
# a3f7b2c feat: tambah pembacaan sensor DHT22
# 1e4d8a9 fix: perbaiki format data suhu
# c0ffee1 docs: update README

# Log dengan graf branch
git log --oneline --graph --all

# Lihat perubahan di commit tertentu
git show a3f7b2c

# Lihat perubahan yang belum di-commit
git diff

# Lihat perubahan yang sudah di-staging tapi belum di-commit
git diff --staged

4. Branching & Merging

Branching adalah salah satu fitur terkuat Git. Bayangkan Anda sedang mengembangkan firmware v2 untuk ESP32, tapi v1 masih berjalan di produksi. Dengan branch, Anda bisa mengembangkan v2 tanpa mengganggu kode v1 β€” keduanya hidup berdampingan di repositori yang sama.

Konsep Branch

Diagram: Branching di Git
  main:        A───B───C───────────────F (merge)
                         \             /
  feature/suhu:           D───E───────

  A = Inisialisasi proyek
  B = Tambah konfigurasi WiFi
  C = Tambah publish MQTT
  D = Buat branch feature/suhu
  E = Tambah pembacaan sensor suhu
  F = Merge feature/suhu ke main

4.1 β€” Membuat & Berpindah Branch

Bash
# Lihat semua branch lokal
git branch
# * main  (tanda * = branch aktif)

# Buat branch baru
git branch feature/suhu-dht22

# Pindah ke branch baru
git checkout feature/suhu-dht22

# Shortcut: buat + pindah sekaligus
git checkout -b feature/suhu-dht22

# Git modern (2.23+): gunakan 'git switch'
git switch -c feature/suhu-dht22   # buat baru + pindah
git switch main                     # kembali ke main

# Lihat semua branch (termasuk remote)
git branch -a
# * main
#   feature/suhu-dht22
#   remotes/origin/main
#   remotes/origin/develop

# Rename branch
git branch -m feature/suhu-dht22 feature/dht22-sensor

# Hapus branch lokal yang sudah selesai
git branch -d feature/dht22-sensor

4.2 β€” Merge: Menggabungkan Branch

Bash
# 1. Pastikan di branch tujuan
git switch main

# 2. Gabungkan branch feature ke main
git merge feature/suhu-dht22
# Output: Merge made by the 'ort' strategy.

# 3. Jika ada konflik, Git akan berhenti dan minta resolusi manual:
# Auto-merging main.py
# CONFLICT (content): Merge conflict in main.py
# Automatic merge failed; fix conflicts and then commit the result.

4.3 β€” Menyelesaikan Merge Conflict

Konflik terjadi saat dua branch mengubah baris yang sama di file yang sama. Git tidak tahu mana yang benar β€” Anda harus memutuskan secara manual.

Python β€” main.py (saat konflik)
# <<<<<<< HEAD (kode dari branch saat ini)
BROKER_HOST = "192.168.1.100"
BROKER_PORT = 1883
# ======== (pemisah)
BROKER_HOST = "mqtt.beebanlabs.id"
BROKER_PORT = 8883
# >>>>>>> feature/suhu-dht22 (kode dari branch yang di-merge)
Bash β€” Resolusi Konflik
# 1. Edit file, hapus marker konflik (<<<, ===, >>>)
#    Pilih kode yang benar atau gabungkan keduanya

# 2. Setelah selesai edit, tambahkan ke staging
git add main.py

# 3. Commit hasil merge
git commit -m "merge: gabung feature/suhu-dht22, selesaikan konflik broker"

# Alternatif: batalkan merge jika terlalu rumit
git merge --abort
πŸ’‘ Tips

Untuk proyek IoT dengan banyak kontributor, usahakan setiap perubahan fitur berada di branch terpisah dan sering-sering merge ke main. Semakin lama branch terpisah, semakin besar kemungkinan konflik. Praktik ini disebut trunk-based development.

5. Remote Repositories

Repositori lokal di komputer Anda hanya bisa diakses oleh Anda. Untuk berkolaborasi dengan orang lain atau membuat cadangan cloud, Anda membutuhkan remote repository. GitHub adalah platform paling populer untuk ini, tapi GitLab dan Bitbucket juga merupakan alternatif yang baik.

5.1 β€” Menghubungkan ke Remote

Bash
# Lihat remote yang sudah terhubung
git remote -v

# Tambahkan remote baru (setelah buat repo di GitHub)
git remote add origin https://github.com/username/iot-smart-home.git

# Ganti URL remote (misal dari HTTPS ke SSH)
git remote set-url origin git@github.com:username/iot-smart-home.git

# Hapus remote
git remote remove origin

5.2 β€” Push: Mengirim ke Remote

Bash
# Push pertama kali (set upstream ke origin/main)
git push -u origin main

# Push selanjutnya (upstream sudah terset)
git push

# Push branch baru ke remote
git push origin feature/suhu-dht22

# Force push (hati-hati β€” menimpa riwayat remote!)
git push --force origin main

# Hapus branch di remote
git push origin --delete feature/suhu-dht22
🚫 Peringatan

Jangan pernah git push --force ke branch yang digunakan banyak orang (misal main atau develop) tanpa koordinasi. Force push menimpa riwayat dan bisa menghapus commit orang lain. Gunakan git push --force-with-lease sebagai alternatif yang lebih aman β€” ia hanya force push jika tidak ada commit baru di remote yang belum Anda pull.

5.3 β€” Pull: Mengambil dari Remote

Bash
# Pull = fetch + merge β€” ambil perubahan terbaru dan gabungkan
git pull

# Pull dari branch tertentu
git pull origin develop

# Fetch saja (lihat perubahan tanpa merge)
git fetch
git log origin/main --oneline

# Pull dengan rebase (riwayat lebih rapi)
git pull --rebase origin main

5.4 β€” Workflow Git Push/Pull

Diagram: Git Remote Workflow
  Developer A (PC Kantor)          GitHub                     Developer B (Rumah)
  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  β”‚ Local Repo       β”‚  push   β”‚              β”‚  pull   β”‚ Local Repo       β”‚
  β”‚                  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β–Ίβ”‚  Remote Repo β”œβ”€β”€β”€β”€β”€β”€β”€β”€β–Ίβ”‚                  β”‚
  β”‚  main            β”‚         β”‚  (origin)    β”‚         β”‚  main            β”‚
  β”‚  feature/abc     β”‚         β”‚              β”‚         β”‚  feature/xyz     β”‚
  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚                            β–²                          β”‚
        β”‚         pull request       β”‚     code review          β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

6. Pull Requests di GitHub

Pull Request (PR) adalah mekanisme inti kolaborasi di GitHub. PR memberitahu tim: "Saya sudah selesai mengerjakan fitur X di branch terpisah, tolong review kode saya sebelum digabung ke main." PR bukan sekadar tombol merge β€” ia adalah ruang diskusi, code review, dan quality gate.

6.1 β€” Alur Kerja Pull Request

Bash β€” Membuat Pull Request
# 1. Buat branch baru dari main
git checkout -b feature/relay-control

# 2. Lakukan perubahan dan commit
git add relay.py
git commit -m "feat: tambah kontrol relay via MQTT"

git add tests/test_relay.py
git commit -m "test: unit test untuk relay control"

# 3. Push branch ke GitHub
git push -u origin feature/relay-control

# 4. Buka GitHub β†’ akan muncul tombol "Compare & pull request"
#    Klik tombol tersebut, isi deskripsi PR, lalu buat PR

# Alternatif: buat PR via GitHub CLI (jika sudah instal gh)
gh pr create --title "feat: kontrol relay via MQTT" \
  --body "Menambahkan modul kontrol relay dengan command on/off via MQTT topic home/actuator/relay"

6.2 β€” Best Practices Pull Request

Praktik Penjelasan
PR kecil & fokusSatu PR = satu fitur/perbaikan. Jangan campur fitur baru dengan refactor besar
Deskripsi jelasJelaskan apa yang diubah, mengapa, dan cara test-nya
Self-review duluReview kode sendiri sebelum minta orang lain β€” perbaiki typo, komentar berlebihan
Link ke issueGunakan "Closes #12" di deskripsi PR agar issue otomatis tertutup saat merge
Tests harus lolosPastikan CI/CD pipeline hijau sebelum minta review
Rebase sebelum reviewPastikan branch Anda up-to-date dengan main sebelum merge

6.3 β€” Code Review

Sebagai reviewer, tugas Anda adalah mengecek:

πŸ” Checklist Code Review
  • βœ… Apakah kode melakukan apa yang diklaim di deskripsi PR?
  • βœ… Apakah ada edge case yang belum ditangani?
  • βœ… Apakah penamaan variabel dan fungsi sudah jelas?
  • βœ… Apakah ada perubahan yang bisa merusak kompatibilitas backward?
  • βœ… Apakah dokumentasi perlu diupdate?
  • βœ… Apakah credential/password terekspos di kode?

7. File .gitignore

Tidak semua file pantas masuk ke repositori. File sementara, cache, environment variable, dan secret key harus diabaikan. File .gitignore memberitahu Git file dan folder mana yang boleh di-skip.

7.1 β€” Membuat .gitignore

Bash
# Buat file .gitignore di root repositori
touch .gitignore

7.2 β€” Template .gitignore untuk Proyek IoT/Python

.gitignore
# ========== PYTHON ==========
__pycache__/
*.py[cod]
*.pyo
*.egg-info/
dist/
build/
*.egg
.eggs/

# ========== VIRTUAL ENVIRONMENT ==========
venv/
.venv/
env/
ENV/

# ========== ENVIRONMENT & SECRETS ==========
.env
.env.local
.env.production
*.pem
*.key
secrets.json
credentials.json

# ========== IDE & EDITOR ==========
.vscode/
.idea/
*.swp
*.swo
*~
.DS_Store
Thumbs.db

# ========== LOGS & DATA ==========
*.log
logs/
data/*.csv
data/*.db

# ========== HARDWARE/EMBEDDED ==========
*.bin
*.hex
*.elf
build_output/
.pio/
.platformio/
⚠️ Peringatan

Jika file sudah pernah di-track oleh Git (sudah pernah di-commit), menambahkannya ke .gitignore saja tidak cukup. Anda harus menghapus file dari tracking terlebih dahulu: git rm --cached namafile. Untuk folder: git rm -r --cached folder/.

7.3 β€” Pola Umum .gitignore

Pola Arti Contoh Cocok
*.logSemua file ekstensi .logdebug.log, error.log
build/Seluruh isi folder buildbuild/output.bin
**/*.pycFile .pyc di semua subfoldersrc/__pycache__/main.pyc
!.env.examplePengecualian β€” file ini TIDAK diabaikan.env.example (template)
data/*.csvCSV di folder data sajadata/sensor_log.csv

8. Kolaborasi di GitHub

GitHub lebih dari sekadar hosting Git β€” ia adalah platform kolaborasi lengkap dengan fitur Issues, Projects, Actions, Discussions, dan banyak lagi. Bagi tim developer IoT, GitHub menjadi pusat koordinasi dari kode firmware sampai deployment ke perangkat.

8.1 β€” Fork & Contribute

Fork adalah cara berkontribusi ke proyek orang lain tanpa harus diundang sebagai collaborator. Anda membuat salinan repositori di akun GitHub sendiri, lalu mengirim Pull Request dari fork Anda ke repositori asli.

Bash β€” Fork Workflow
# 1. Fork repositori di GitHub (klik tombol "Fork")

# 2. Clone fork Anda
git clone https://github.com/username/iot-smart-home.git
cd iot-smart-home

# 3. Tambahkan repositori asli sebagai "upstream"
git remote add upstream https://github.com/original-owner/iot-smart-home.git

# 4. Buat branch untuk kontribusi
git checkout -b fix/typo-readme

# 5. Lakukan perubahan & commit
git add README.md
git commit -m "docs: perbaiki typo di README"

# 6. Push ke fork Anda
git push origin fix/typo-readme

# 7. Buka GitHub β†’ buat Pull Request dari fork ke repositori asli

# 8. Untuk tetap up-to-date dengan repositori asli:
git fetch upstream
git merge upstream/main

8.2 β€” GitHub Issues & Projects

Issues adalah cara terstruktur untuk melacak bug, fitur baru, dan tugas. Untuk proyek IoT, Issues sangat berguna untuk:

Kegunaan Issue Contoh
Bug Report"Sensor DHT22 mengembalikan NaN saat suhu > 50Β°C"
Feature Request"Tambahkan support untuk sensor BME680"
Task / Todo"Setup CI/CD pipeline untuk auto-deploy firmware"
Diskusi Teknis"MQTT vs HTTP untuk komunikasi sensor β€” mana yang lebih efisien?"
Bash β€” GitHub CLI untuk Issues
# Buat issue baru via GitHub CLI
gh issue create --title "feat: support sensor BME680" \
  --body "Tambahkan pembacaan data dari sensor BME680 via I2C"

# Lihat daftar issue
gh issue list

# Tutup issue dari commit
git commit -m "feat: tambah support BME680

Closes #15"

8.3 β€” GitHub Actions (CI/CD)

GitHub Actions memungkinkan Anda menjalankan otomatisasi β€” build, test, deploy β€” setiap kali ada push atau pull request. Untuk proyek IoT, ini bisa digunakan untuk:

βš™οΈ Contoh Penggunaan GitHub Actions untuk IoT
  • πŸ”¨ Build firmware β€” kompilasi kode Arduino/PlatformIO setiap push
  • πŸ§ͺ Run tests β€” jalankan unit test Python sebelum merge PR
  • πŸ“¦ Deploy OTA β€” otomatis upload firmware ke server update
  • πŸ“‹ Lint code β€” cek style dan format kode (pylint, flake8)
  • 🏷️ Auto release β€” buat GitHub Release dengan binary saat tag baru
YAML β€” .github/workflows/test.yml
name: Run Tests

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.12'

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install -r requirements.txt
          pip install pytest

      - name: Run tests
        run: pytest tests/ -v

8.4 β€” SSH Key untuk GitHub

SSH key menghilangkan kebutuhan memasukkan password setiap kali push. Ini lebih aman dan nyaman:

Bash
# 1. Generate SSH key
ssh-keygen -t ed25519 -C "email@anda.com"
# Tekan Enter untuk semua prompt (gunakan default)

# 2. Tambahkan key ke SSH agent
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

# 3. Copy public key
cat ~/.ssh/id_ed25519.pub
# Salin output-nya

# 4. Buka GitHub β†’ Settings β†’ SSH and GPG keys β†’ New SSH key
#    Paste public key di sana

# 5. Test koneksi
ssh -T git@github.com
# Hi username! You've successfully authenticated...

9. Quiz: Uji Pemahamanmu!

Setelah membaca tutorial di atas, jawablah 5 pertanyaan berikut untuk menguji pemahamanmu tentang Git dan GitHub:

Pertanyaan 1: Perintah apa yang digunakan untuk menginisialisasi repositori Git baru di folder saat ini?

a) git start
b) git init
c) git create
d) git new

Pertanyaan 2: Apa fungsi dari staging area di Git?

a) Menyimpan backup otomatis setiap jam
b) Ruang tunggu untuk memilih perubahan mana yang akan masuk ke commit berikutnya
c) Menampilkan riwayat semua commit yang pernah dibuat
d) Menyimpan perubahan dari remote repository

Pertanyaan 3: Perintah apa yang digunakan untuk menggabungkan branch "feature/abc" ke branch "main"?

a) git combine feature/abc main
b) git push feature/abc main
c) git checkout main && git merge feature/abc
d) git branch --merge feature/abc

Pertanyaan 4: File apa yang digunakan untuk memberitahu Git agar mengabaikan file tertentu (seperti .env dan __pycache__)?

a) .gitconfig
b) .gitexclude
c) .gitignore
d) .gitrules

Pertanyaan 5: Apa yang dimaksud dengan "fork" di GitHub?

a) Menghapus repositori orang lain
b) Membuat salinan repositori orang lain ke akun GitHub sendiri
c) Mengunci repositori agar tidak bisa diakses publik
d) Menggabungkan dua repositori menjadi satu