GitHub

Belum masuk. Progresmu tidak tersimpan.

Masuk
  • Bab 6 dari 8
  • 30 menit
  • 4 soal kuis

Fork, Issues, Projects, dan GitHub Flow

Di bab ini (8 bagian)
  1. Tujuan
  2. Fork dan kontribusi open source
  3. Issues: daftar pekerjaan yang bisa didiskusikan
  4. GitHub Projects
  5. GitHub Flow langkah demi langkah
  6. Kesalahan umum
  7. Coba sendiri
  8. Rangkuman

Tujuan bab ini

  • Berkontribusi ke repo orang lain lewat fork, lalu menjaga fork tetap sinkron dengan upstream.
  • Melacak pekerjaan dengan Issues, label, milestone, assignee, dan template issue.
  • Mengatur pekerjaan tim di GitHub Projects memakai view board dan table serta field kustom.
  • Menjalankan GitHub Flow dari branch sampai merge.

Fork dan kontribusi open source

Kamu tidak punya akses tulis ke repo orang lain, jadi tidak bisa langsung push ke sana. Solusinya fork: salinan repo di akun GitHub-mu sendiri. Beda fork dan clone itu penting: fork membuat salinan di GitHub, clone membuat salinan di laptop.

Alur fork, clone, commit, push, lalu pull request ke repo asli

Alurnya:

  1. Buka repo asli, klik Fork di kanan atas, lalu Create fork. Opsi Copy the main branch only biasanya sudah dicentang, dan itu cukup.
  2. Clone fork-mu (bukan repo asli) ke laptop.
  3. Buat branch baru, commit perubahanmu.
  4. Push ke fork-mu.
  5. Di halaman fork, klik Contribute → Open pull request. Base-nya repo asli, compare-nya branch di fork-mu.

Saat membuat PR dari fork, biarkan Allow edits by maintainers tercentang supaya maintainer bisa merapikan sedikit tanpa harus menunggu kamu.

Di laptop, kamu akan punya dua remote. origin menunjuk fork-mu, dan repo asli biasanya diberi nama upstream:

git remote add upstream https://github.com/pemilik-asli/repo.git
git remote -v
origin	https://github.com/rina-dev/repo.git (fetch)
origin	https://github.com/rina-dev/repo.git (push)
upstream	https://github.com/pemilik-asli/repo.git (fetch)
upstream	https://github.com/pemilik-asli/repo.git (push)

Menyinkronkan fork. Repo asli terus bergerak, sementara fork-mu tidak ikut berubah dengan sendirinya. Ada dua cara mengejarnya:

  • Di GitHub: di halaman fork, klik Sync fork lalu Update branch.
  • Di laptop:
git switch main
git fetch upstream
git merge upstream/main
git push origin main

Lakukan sinkron sebelum membuat branch baru supaya PR-mu berangkat dari kode terbaru.

Etika kontribusi: baca CONTRIBUTING.md dan Code of Conduct dulu, cari issue berlabel good first issue, diskusikan di issue sebelum menulis perubahan besar, dan buat satu PR untuk satu perubahan logis.

Issues: daftar pekerjaan yang bisa didiskusikan

Issue adalah unit pekerjaan terkecil di GitHub: laporan bug, ide fitur, atau pertanyaan. Buka tab Issues → New issue, isi judul dan deskripsi. Setiap issue dapat nomor, misalnya #12, yang bisa kamu sebut di commit, komentar, atau PR. Seperti di bab sebelumnya, Closes #12 di deskripsi PR menutup issue itu otomatis saat PR di-merge ke branch default.

Di sidebar kanan issue ada beberapa alat pengelompokan:

AlatFungsi
Assigneessiapa penanggung jawabnya
Labelsjenis atau area kerja, misalnya bug, enhancement, documentation
Milestonetarget rilis dengan tenggat, misalnya "v1.0"
Projectsmenambahkan issue ke papan kerja

Repo baru otomatis punya label bawaan seperti bug, documentation, duplicate, enhancement, good first issue, help wanted, invalid, question, dan wontfix. Kamu bisa menambah label sendiri, misalnya prioritas: tinggi. Milestone dibuat dari halaman Issues lewat Milestones → New milestone, lengkap dengan judul, tanggal jatuh tempo, dan deskripsi. GitHub lalu menampilkan progres: berapa persen issue di milestone itu yang sudah ditutup.

Template issue memastikan laporan bug selalu lengkap. Simpan file Markdown di folder .github/ISSUE_TEMPLATE/ di branch default:

---
name: Laporan bug
about: Laporkan sesuatu yang tidak berjalan semestinya
title: "[Bug] "
labels: bug
---

## Langkah mereproduksi
1.
2.

## Yang diharapkan

## Yang terjadi

## Browser dan perangkat

Saat seseorang klik New issue, template ini muncul sebagai pilihan, dan label bug langsung terpasang.

GitHub Projects

GitHub Projects adalah papan kerja yang tersambung langsung dengan issue dan PR. Buat dari tab Projects di profil atau organisasi, lalu tautkan ke repo. Satu project bisa berisi item dari beberapa repo.

Data yang sama bisa dilihat lewat beberapa view:

  • Board: papan kanban dengan kolom berdasarkan field Status (bawaannya Todo, In Progress, Done). Tambah kolom seperti "In Review" kalau perlu.
  • Table: seperti spreadsheet. Enak untuk sortir, filter, dan group by.
  • Roadmap: lini masa berdasarkan field tanggal atau iteration.

Field adalah kolom data tambahan per item. Selain field bawaan (Assignees, Labels, Milestone, Status), kamu bisa menambah field kustom bertipe text, number, date, single select, atau iteration. Contohnya Prioritas (single select: Tinggi, Sedang, Rendah), Estimasi (number), dan Sprint (iteration dua minggu).

Tambahkan item dengan mengetik # di baris paling bawah lalu pilih issue atau PR. Bisa juga menulis draft issue yang nanti dikonversi menjadi issue sungguhan. Projects juga punya workflows bawaan: saat issue ditutup atau PR di-merge, status item otomatis menjadi Done. Untuk tim kecil, ini sudah menggantikan aplikasi manajemen tugas terpisah.

GitHub Flow langkah demi langkah

GitHub Flow adalah alur kerja ringan dengan satu branch permanen: main, yang selalu siap dirilis.

  1. Buat branch dari main dengan nama yang jelas, misalnya feature/mode-gelap.
  2. Buat perubahan: commit kecil dengan pesan bermakna, push sesering mungkin.
  3. Buka pull request, tautkan issue dengan Closes #34, dan minta review. Draft PR boleh dibuka sejak awal.
  4. Tanggapi review: diskusi, perbaiki, lalu push lagi ke branch yang sama. Pemeriksaan otomatis (CI) berjalan di sini.
  5. Merge setelah disetujui dan semua pemeriksaan lolos, lalu deploy.
  6. Hapus branch yang sudah di-merge.

Bandingkan dengan Git Flow, yang punya branch main, develop, release, dan hotfix. Git Flow cocok untuk produk dengan rilis terjadwal, tapi lebih rumit. Untuk tugas kuliah dan proyek kecil, GitHub Flow sudah lebih dari cukup.

Kesalahan umum

  • Clone repo asli, bukan fork. Push-mu akan ditolak karena tidak punya akses. Ganti remote dengan git remote set-url origin <url-fork>, lalu pasang repo asli sebagai upstream.
  • Bekerja langsung di main milik fork. Sinkron jadi berantakan. Selalu buat branch baru.
  • Fork tidak pernah disinkronkan, sehingga PR penuh konflik dengan kode terbaru.
  • Issue tanpa konteks seperti "tidak jalan". Pakai template supaya langkah reproduksinya jelas.
  • Template disimpan di folder yang salah atau bukan di branch default, sehingga tidak muncul di New issue.

Coba sendiri

Simulasikan repo asli dan fork dengan repo bare di laptop. Hash akan berbeda.

git config --global init.defaultBranch main
mkdir fork-lab && cd fork-lab
git init asli-kerja && cd asli-kerja
echo "# Proyek Asli" > README.md
git add . && git commit -m "Rilis awal"
cd ..
git clone --bare asli-kerja asli.git      # "repo asli" di GitHub
git clone --bare asli.git fork.git        # tombol Fork
git clone fork.git kontribusi && cd kontribusi
git remote add upstream ../asli.git
git remote -v
origin	/home/kamu/fork-lab/fork.git (fetch)
origin	/home/kamu/fork-lab/fork.git (push)
upstream	../asli.git (fetch)
upstream	../asli.git (push)

Sekarang pemilik repo asli menambah commit:

cd ../asli-kerja
git remote add origin ../asli.git
echo "Panduan kontribusi" > CONTRIBUTING.md
git add . && git commit -m "Tambah CONTRIBUTING"
git push origin main

Sinkronkan fork-mu:

cd ../kontribusi
git fetch upstream
git log --oneline main..upstream/main
git merge upstream/main
git push origin main
029f3a0 Tambah CONTRIBUTING
Updating 606ad2e..029f3a0
Fast-forward
 CONTRIBUTING.md | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 CONTRIBUTING.md

Lanjutkan di GitHub sungguhan: fork satu repo latihan, buat issue dengan label, tambahkan ke Project, lalu jalankan GitHub Flow sampai PR di-merge.

Rangkuman

  • Fork adalah salinan di akun GitHub-mu. origin menunjuk fork, upstream menunjuk repo asli.
  • Sinkronkan fork dengan Sync fork atau git fetch upstream lalu git merge upstream/main.
  • Issues dikelompokkan dengan label, milestone, dan assignee, sementara template di .github/ISSUE_TEMPLATE/ membuat laporan seragam.
  • GitHub Projects menampilkan issue dan PR sebagai board, table, atau roadmap, dengan field kustom dan status otomatis.
  • GitHub Flow: branch, commit, pull request, review dan CI, merge, hapus branch.

Selesaikan bab ini

  1. 1. Baca materi
  2. 2. Kuis (4 soal)

Cek pemahaman

  1. 1Berdasarkan output `git remote -v` di fork berikut, perintah mana yang mengambil commit terbaru dari repo asli?

    $ git remote -v
    origin	https://github.com/rina-dev/kamus.git (fetch)
    origin	https://github.com/rina-dev/kamus.git (push)
    upstream	https://github.com/budi/kamus.git (fetch)
    upstream	https://github.com/budi/kamus.git (push)
  2. 2Label bawaan mana yang dipakai untuk menandai issue yang ramah bagi kontributor pemula?

  3. 3GitHub Flow memakai branch permanen develop dan release selain main.

  4. 4View GitHub Projects mana yang menampilkan item sebagai kolom kanban berdasarkan field Status?