Repository lokal yang sehat masih berdiri sendirian: satu-satunya yang mengenal riwayatnya adalah komputer kita. Langkah pertama ke dunia kolaborasi adalah menyiapkan rumah untuknya di platform hosting — menekan satu tombol dan mengisi satu formulir. Kabar baiknya: tiga platform besar (GitHub , GitLab , Bitbucket ) menawarkan alur yang nyaris identik, dan di balik tombolnya Git melakukan hal yang sama persis: menyiapkan sebuah repository kosong di server. Chapter ini membedah formulirnya satu per satu, lalu mensimulasikan hasilnya dengan bare repo sungguhan di lokal.

Alur yang Nyaris Identik #

Setelah masuk log, pembuatan repository di ketiga platform menempuh jalur serupa — hanya kosakata menunya yang berbeda:

PlatformJalur di antarmuka webJudul formulirnya
GitHubtombol New (atau menu + → New repository)Create a new repository
GitLabtombol New project → Create blank projectCreate blank project
Bitbuckettombol Create → RepositoryCreate a new repository

Seluruh pengaturan penting hidup dalam satu formulir yang sama: nama, visibilitas, dan berkas awal. Kita bahas satu per satu karena dua di antaranya menentukan pengalaman push pertama kita.

Nama Repository #

Gunakan gaya penamaan kebab-case — huruf kecil semua dengan tanda hubung sebagai pemisah, seperti toko-buku atau manajemen-inventaris. Alasannya praktis: nama repository menjadi bagian alamat (github.com/budi/toko-buku) dan variabel di berbagai alat otomasi; spasi dan huruf kapital memaksa penanganan khusus di sana-sini. Nama yang pendek tapi deskriptif juga lebih mudah diketik saat kolaborator melakukan git clone.

Visibilitas: Publik atau Privat #

PilihanSiapa yang bisa melihatKapan dipilih
Publiksiapa saja di internetproyek open source, portofolio, materi belajar
Privathanya kolaborator yang diundangkode kerja, eksperimen, tugas yang belum siap

Visibilitas bisa diganti kapan saja dari pengaturan repository. Kebijakan aman untuk pemula: mulai dari privat, buka menjadi publik hanya ketika kode sudah layak dilihat — kebalikan lebih menyakitkan karena riwayat Git menyimpan segala yang pernah ter-commit.

README Otomatis: Kotak Centang yang Menentukan Nasib #

Formulir ketiga platform menyediakan opsi menginisialisasi repository dengan berkas awal — README, .gitignore, dan lisensi — langsung dari web. Opsi ini terasa membantu, tetapi untuk kasus kita justru sumber masalah klasik: ketika repository lokal sudah punya commit sendiri, server yang sudah berisi commit awal membuat dua riwayat tanpa leluhur bersama. Push pertama akan ditolak, dan solusinya (merge --allow-unrelated-histories) baru kita praktikkan di chapter Menghubungkan Repository Lokal .

Pilihan Lisensi #

Repository publik tanpa lisensi membuat orang lain secara hukum tidak boleh memakai kode kita. Tiga pilihan yang paling umum:

LisensiKarakterCocok untuk
MITpermisif, teks ringkasproyek kecil dan perpustakaan yang ingin diadopsi seluas mungkin
Apache-2.0permisif dengan ketegasan hak patenproyek korporat yang butuh kejelasan legal
GPL-3.0copyleft — turunan wajib terbukaproyek yang ingin memastikan semua versi turunannya tetap open source

Lisensi ditambahkan sebagai berkas LICENSE di akar repository dan bisa juga ditambahkan belakangan — termasuk saat kita sudah punya riwayat commit.

Simulasi Nyata: Remote Baru dengan Bare Repo #

Apa yang sebenarnya terjadi di server ketika tombol Create ditekan? Secara Git: sebuah repository kosong dibuat — padanan git init --bare yang sudah kita kenal dari Konsep Remote . Kita bisa menyimulasikannya persis di sandbox:

bash
mkdir latihan-remote-baru && cd latihan-remote-baru
git init --bare -b main toko-remote.git

Output yang Dihasilkan:

text
Initialized empty Git repository in /home/z/my-project/tutorial-extracted/work/sandbox/git-hosting-platforms/part-a/latihan-remote-baru/toko-remote.git/

Jalur pada keluaran menyesuaikan lokasi direktori masing-masing. Perintah ini membuat persis apa yang dibuat server ketika tombol Create ditekan: berkas database riwayat (objects/, refs/) siap, tetapi belum ada satu commit pun dan belum ada branch. Perbedaannya dengan platform hanya pada lapisan non-Git — halaman web, pengaturan akses, issues — yang tidak menyentuh data riwayat sama sekali.

Repository baru itu lalu bisa kita uji dengan git clone, persis seperti mengkloning repository yang barusan dibuat di platform:

bash
git clone toko-remote.git klon-toko

Output yang Dihasilkan:

text
Cloning into 'klon-toko'...
warning: You appear to have cloned an empty repository.
done.

Peringatan itu justru kabar baik sesuai tip di atas: repository benar-benar kosong, sehingga bebas bentrok dengan riwayat mana pun. Klonennya pun sudah terhubung penuh:

bash
cd klon-toko
git remote -v

Output yang Dihasilkan:

text
origin  /home/z/my-project/tutorial-extracted/work/sandbox/git-hosting-platforms/part-a/latihan-remote-baru/toko-remote.git (fetch)
origin  /home/z/my-project/tutorial-extracted/work/sandbox/git-hosting-platforms/part-a/latihan-remote-baru/toko-remote.git (push)
bash
git status

Output yang Dihasilkan:

text
On branch main

No commits yet

nothing to commit (create/copy files and use "git add" to track)

Dua keluaran terakhir menegaskan posisi awal yang sempurna: origin sudah terdaftar (clone otomatis mendaftarkannya, pembahasan lengkap di git clone ), branch main siap, dan riwayat kosong menanti commit pertama kita.

Alamat yang Kita Terima #

Selesai dibuat, platform menampilkan alamat repository — bentuknya dua varian per platform:

PlatformHTTPSSSH
GitHubhttps://github.com/budi/toko-buku.git[email protected]:budi/toko-buku.git
GitLabhttps://gitlab.com/budi/toko-buku.git[email protected]:budi/toko-buku.git
Bitbuckethttps://bitbucket.org/budi/toko-buku.git[email protected]:budi/toko-buku.git

Alamat inilah yang kita daftarkan ke repository lokal atau pakai untuk clone. Bedah perbedaan dua protokol itu — port, kredensial, kapan memilih yang mana — menjadi agenda khusus di chapter SSH vs HTTPS ; sebelum ke sana, kita harus benar-benar menghubungkan repository lokal dengan remote yang baru lahir, pokok bahasan berikutnya.