Sejauh ini semua materi bergerak dalam satu kursi: satu orang, satu repository, paling banyak satu remote yang ditarik dan didorong sendiri. Begitu anggota tim masuk, masalahnya berpindah — bukan lagi bagaimana menjalankan perintah, melainkan siapa mendorong ke mana, kapan pekerjaan digabung, dan siapa berhak menekan tombol merge. Git sendiri tidak memaksakan jawaban; ia hanya menyediakan bahan bakunya: branch, remote, push, dan fetch. Chapter ini membedah anatomi kolaborasi dari bahan-bahan itu — dua model dasar, peran-peran di dalamnya, dan satu siklus yang mendasari hampir semua workflow — sebelum section ini memetakan pilihan workflow satu per satu.
Dua Model Dasar: Shared dan Fork #
Kolaborasi Git pada praktiknya bermuara pada satu pertanyaan: di repository mana anggota tim boleh mendorong hasil kerjanya. Ada dua jawaban yang dominan. Model shared repository memberi semua anggota akses push ke satu repository yang sama — satu titik temu tempat semua branch hidup. Model fork memberi setiap kontributor salinan repository pribadi di platform hosting; pekerjaan masuk ke repository asal lewat permintaan merge yang direview pemiliknya.
| Aspek | Shared repository | Fork |
|---|---|---|
| Tempat push | satu repository bersama | fork pribadi kontributor |
| Siapa boleh push | anggota tim dengan akses tulis | siapa pun yang membuat fork |
| Pintu masuk ke main | branch langsung atau pull request | hampir selalu pull request |
| Cocok untuk | tim internal, proyek privat | proyek terbuka, kontributor eksternal |
Model shared bisa kita lihat langsung dengan bahan yang sudah dikuasai section Remote Repository
. Budi membuat repository kerja, menyiapkan bare repository sebagai pusat, lalu mendorong main pertama:
mkdir latihan && cd latihan
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"
printf 'beranda\n' > situs.md
git add situs.md
git commit -m "Buat kerangka toko"
git init --bare ../toko-bersama.git
git remote add origin ../toko-bersama.git
git push -u origin mainOutput yang Dihasilkan (perintah terakhir):
To ../toko-bersama.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.Titik temu sudah berdiri. Siti — satu meja di sebelah — tinggal menyalinnya dari direktori induk:
cd ..
git clone toko-bersama.git sitiOutput yang Dihasilkan:
Cloning into 'siti'...
done.cd siti
git remote -vOutput yang Dihasilkan:
origin ../toko-bersama.git (fetch)
origin ../toko-bersama.git (push)Satu URL, dua baris arah: fetch untuk menarik, push untuk mendorong — persis pola yang dibedah di Menambahkan Remote
. Inilah inti model shared: repository toko-bersama.git adalah alamat yang sama di meja Budi dan meja Siti. Jalur pada keluaran menyesuaikan lokasi direktori di mesin pembaca; di platform nyata URL ini berbentuk HTTPS atau SSH.
Koordinasinya terasa begitu Budi bergerak duluan. Siangnya Budi menambah daftar produk dan mendorongnya:
cd ../latihan
printf 'kopi\ngula\n' > produk.md
git add produk.md
git commit -m "Tambah daftar produk"
git push origin mainOutput yang Dihasilkan (perintah terakhir):
To ../toko-bersama.git
a157a72..e95433a main -> mainDi meja Siti, perubahan itu belum terlihat sampai Siti menariknya:
cd ../siti
git fetch originOutput yang Dihasilkan:
From ../toko-bersama
a157a72..e95433a main -> origin/maingit statusOutput yang Dihasilkan:
On branch main
Your branch is behind 'origin/main' by 1 commit, and can be fast-forwarded.
(use "git pull" to update your local branch)
nothing to commit, working tree cleanHash commit di mesin pembaca akan berbeda dari keluaran di atas — hash dihitung dari isi, pesan, penulis, dan waktu, jadi angka di mesin mana pun tidak akan sama. Yang penting bentuknya: fetch memindahkan origin/main tanpa menyentuh branch lokal, lalu status melaporkan main tertinggal satu commit — laporan behind pun cuma sejauh pengetahuan lokal, karena remote bisa saja sudah bergerak lagi, seperti diingatkan di chapter Remote-Tracking Branch
. Model fork memakai prinsip yang sama dengan satu tambahan: dua remote dalam satu clone. Bedanya dibedah khusus di chapter Fork dan Upstream
.
Peran di Dalam Tim #
Workflow mana pun dipilih, tiga peran hampir selalu muncul. Perannya bukan jabatan resmi — satu orang sering memegang dua peran sekaligus di tim kecil.
| Peran | Hak utama | Tanggung jawab |
|---|---|---|
| Maintainer | merge ke branch utama, atur akses | menjaga mutu dan arah repository |
| Kontributor | push branch pekerjaan | menyerahkan perubahan siap review |
| Reviewer | komentar dan persetujuan di pull request | memeriksa kebenaran dan keterbacaan |
Maintainer adalah penjaga pintu: ke main hanya masuk pekerjaan yang sudah matang, dan keputusan merge-nya menentukan kesehatan repository. Kontributor tidak harus punya akses tulis ke branch utama — cukup branch pekerjaan sendiri, baik di repository bersama (model shared) maupun di fork pribadi (model fork). Reviewer membaca diff, menandai masalah, dan memberi persetujuan; di banyak tim maintainer sekaligus menjadi reviewer terakhir.
Siklus Umum: Branch, Commit, Push, Review, Merge #
Pola dasar yang diulang setiap anggota tim — di workflow mana pun — berbentuk lingkaran, bukan garis. Pekerjaan lahir di branch terpisah agar main tidak pernah menampung setengah jadi, dikirim ke remote agar orang lain bisa melihatnya, direview sebelum percaya, baru digabung:
Enam putaran percakapan di atas adalah kerangka yang sama untuk semua workflow di section ini. Dari sisi kontribator: branch (materi Konsep Branch
), commit, lalu push dengan opsi -u agar branch lokal terikat ke remote — ikatan yang dijelaskan di Tracking Branch
. Dari sisi maintainer: fetch, periksa rentang main..fitur dan diff-nya, lalu git merge
. Putaran terakhir menutup lingkaran: kontribator menarik main yang sudah berisi hasil merge miliknya, sebelum memulai branch berikutnya.
Empat workflow di bab-bab berikutnya membedah variasi siklus ini; uraian resmi dari sudut pandang Git bisa dibaca di Pro Git: Distributed Workflows .
Peta Section Kolaborasi Tim #
Section ini berjalan dari anatomi ke workflow, lalu peralatan pendukungnya. Tabel berikut memetakan 13 chapter-nya:
| Chapter | Fokus |
|---|---|
| Workflow Kolaborasi | model shared vs fork, peran, siklus dasar |
| Fork dan Upstream | dua remote dalam satu clone dan sinkronisasinya |
| Pull Request | anatomi PR dan menyiapkan PR berkualitas |
| Code Review | proses review, komentar membangun, tanggapan |
| Feature Branch Workflow | siklus lengkap semua-kerja-di-branch |
| GitHub Flow | workflow ringan berpusat pada deploy |
| GitFlow | model branch untuk rilis terjadwal |
| Trunk-Based Development | integrasi berkelanjutan tanpa branch panjang |
| Menjaga Branch Tetap Sinkron | merawat branch berumur panjang terhadap main |
| Menyelesaikan Konflik Kolaborasi | konflik lintas rekan dan penyelesaiannya |
| Commit Conventions | kesepakatan penulisan pesan tim |
| Protected Branches | melindungi main lewat pengaturan platform |
| Koordinasi Release | menyatukan workflow dan rilis |
Mulai paling natural dari perbedaan paling mendasar: bagaimana seorang kontribator tanpa akses tulis tetap bisa menyumbang — dua remote, origin dan upstream, dalam satu clone. Chapter berikutnya membuktikannya dengan Git murni di sandbox.