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:
| Platform | Jalur di antarmuka web | Judul formulirnya |
|---|---|---|
| GitHub | tombol New (atau menu + → New repository) | Create a new repository |
| GitLab | tombol New project → Create blank project | Create blank project |
| Bitbucket | tombol Create → Repository | Create 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 #
| Pilihan | Siapa yang bisa melihat | Kapan dipilih |
|---|---|---|
| Publik | siapa saja di internet | proyek open source, portofolio, materi belajar |
| Privat | hanya kolaborator yang diundang | kode 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:
| Lisensi | Karakter | Cocok untuk |
|---|---|---|
| MIT | permisif, teks ringkas | proyek kecil dan perpustakaan yang ingin diadopsi seluas mungkin |
| Apache-2.0 | permisif dengan ketegasan hak paten | proyek korporat yang butuh kejelasan legal |
| GPL-3.0 | copyleft — turunan wajib terbuka | proyek 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:
mkdir latihan-remote-baru && cd latihan-remote-baru
git init --bare -b main toko-remote.gitOutput yang Dihasilkan:
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:
git clone toko-remote.git klon-tokoOutput yang Dihasilkan:
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:
cd klon-toko
git remote -vOutput yang Dihasilkan:
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)git statusOutput yang Dihasilkan:
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:
| Platform | HTTPS | SSH |
|---|---|---|
| GitHub | https://github.com/budi/toko-buku.git | [email protected]:budi/toko-buku.git |
| GitLab | https://gitlab.com/budi/toko-buku.git | [email protected]:budi/toko-buku.git |
| Bitbucket | https://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.