Repositori Git: cara membuat dengan git init dan menghubungkan remote
Repositori Git adalah folder proyek beserta subfolder tersembunyi .git tempat Git menyimpan seluruh riwayat, branch, dan pengaturannya. Repositori dibuat dengan git init di dalam folder proyek atau diunduh dengan git clone. Repositori remote dihubungkan dengan git remote add origin alamat.
Repositori Git adalah proyek yang perubahannya dicatat oleh Git. Secara fisik, ini adalah folder biasa berisi berkas Anda, ditambah subfolder tersembunyi .git tempat disimpannya seluruh riwayat: commit, branch, tag, dan pengaturan. Jika .git dihapus, yang tersisa hanya berkas tanpa satu pun versi sebelumnya.
Apa saja yang ada di dalam repositori
Saat bekerja dengan Git, ada tiga area tempat perubahan berpindah:
- direktori kerja (working tree) — berkas yang Anda lihat dan edit;
- index (staging area) — draf commit berikutnya, tempat perubahan masuk lewat
git add; - riwayat — basis data commit di dalam
.git, tempat perubahan masuk lewatgit commit.
Secara ketat, repositori itu sendiri adalah isi dari .git. Direktori kerja hanyalah satu versi proyek yang «dikeluarkan» Git dari riwayat.
Cara membuat repositori dengan git init
Masuk ke folder proyek lalu jalankan satu perintah:
cd ~/projects/my-app
git init
Initialized empty Git repository in /home/user/projects/my-app/.git/
Repositori bisa dibuat di folder kosong maupun di folder yang sudah berisi berkas. Pada kasus kedua tidak ada yang hilang: berkas yang ada menjadi tidak terlacak (untracked) sampai Anda menambahkannya dengan git add.
Beberapa varian perintah yang berguna:
# Membuat folder sekaligus repositori di dalamnya
git init my-app
# Menentukan nama branch pertama (jika tidak, dipakai master atau nilai dari pengaturan)
git init -b main
# Menjadikan main sebagai branch default untuk semua repositori baru
git config --global init.defaultBranch main
Commit pertama
Repositori tanpa commit hampir tidak berguna. Setelah git init, biasanya langkahnya seperti ini:
git config --global user.name "Ivan Petrov"
git config --global user.email "ivan@example.com"
git status
git add .
git commit -m "Struktur awal proyek"
Nama dan e-mail cukup diatur sekali di komputer Anda, karena keduanya dicatat di setiap commit. Tanpa itu, Git menolak commit dan meminta Anda memperkenalkan diri.
Tambahkan .gitignore sejak awal
Sebelum git add . pertama, buat berkas .gitignore yang berisi daftar hal yang tidak boleh masuk ke repositori: dependensi, hasil build, rahasia, dan berkas IDE.
node_modules/
dist/
.env
.idea/
.vscode/
*.log
__pycache__/
Jika berkas sudah terlanjur masuk commit, .gitignore tidak akan menghapusnya. Hentikan pelacakannya dan biarkan berkas tetap ada di disk: git rm --cached .env, lalu commit.
Isi folder .git
Dalam pekerjaan sehari-hari Anda tidak perlu membuka folder ini, tetapi memahami strukturnya menghilangkan banyak kebingungan:
| Elemen | Isinya |
|---|---|
objects/ | Objek terkompresi: isi berkas (blob), struktur folder (tree), dan commit |
refs/heads/ | Branch — berkas berisi hash commit terakhir |
refs/tags/ | Tag |
HEAD | Penunjuk ke branch aktif, misalnya ref: refs/heads/main |
config | Pengaturan repositori ini, termasuk daftar remote |
index | Keadaan staging area |
hooks/ | Skrip yang dijalankan saat event tertentu (pre-commit, pre-push) |
Dari sini terlihat bahwa branch di Git sebenarnya hanyalah berkas kecil berisi satu hash. Itulah sebabnya membuat branch terjadi seketika dan tanpa biaya.
Cara memastikan sebuah folder adalah repositori
git status
# atau yang lebih tepat
git rev-parse --is-inside-work-tree
Di luar repositori, Anda akan mendapat fatal: not a git repository (or any of the parent directories): .git. Perhatikan frasa «parent directories»: Git mencari .git ke atas di pohon folder. Jika Anda tanpa sengaja menjalankan git init di folder home, seluruh folder home menjadi repositori, dan folder .git itu harus dihapus.
Repositori lokal dan remote
Repositori yang dibuat dengan git init hanya ada di komputer Anda. Agar kode bisa dibagikan dan memiliki cadangan, repositori dihubungkan ke remote, yaitu salinan di server: GitHub, GitLab, Bitbucket, atau server Git sendiri.
Repositori remote tidak «utama» menurut Git: setiap salinan utuh dan berisi seluruh riwayat. Yang menjadikannya pusat hanyalah kesepakatan tim.
git remote: menghubungkan repositori remote
Remote adalah nama pendek untuk alamat server. Nama utamanya menurut konvensi adalah origin.
# Menambahkan remote
git remote add origin git@github.com:username/my-app.git
# Melihat daftar remote beserta alamatnya
git remote -v
origin git@github.com:username/my-app.git (fetch)
origin git@github.com:username/my-app.git (push)
Lalu kirim branch dan hubungkan dengan branch remote:
git push -u origin main
Perintah git remote yang sering dipakai
| Perintah | Fungsi |
|---|---|
git remote -v | Daftar remote beserta alamatnya |
git remote add <nama> <url> | Menghubungkan repositori remote baru |
git remote set-url origin <url> | Mengganti alamat, misalnya dari HTTPS ke SSH |
git remote rename origin old | Mengganti nama remote |
git remote remove old | Menghapus remote (server itu sendiri tidak tersentuh) |
git remote show origin | Rincian: branch, pelacakan, dan apa yang tertinggal |
Format alamat
https://github.com/user/repo.git— HTTPS, bisa dipakai di mana saja, untuk menulis diperlukan token;git@github.com:user/repo.git— SSH, memerlukan kunci; setelah diatur, tidak ada permintaan kata sandi;/srv/git/repo.gitataufile:///srv/git/repo.git— path lokal, praktis untuk eksperimen.
Kesalahan yang sering terjadi
«error: remote origin already exists». Remote dengan nama itu sudah ada. Jika ingin mengganti alamatnya, gunakan git remote set-url origin <url>, bukan add lagi.
«failed to push some refs» / «Updates were rejected». Di server ada commit yang belum Anda miliki, sering kali berupa README yang dibuat saat repositori dibuat di situs. Jalankan git pull --rebase origin main, lalu ulangi push. Jika riwayatnya sama sekali tidak berhubungan, Git akan menjawab «refusing to merge unrelated histories», dan git pull membutuhkan flag --allow-unrelated-histories. Lebih mudah membuat repositori di situs dalam keadaan kosong.
«src refspec main does not match any». Anda mencoba mengirim branch yang tidak ada: belum ada commit sama sekali, atau branch-nya bernama master. Periksa dengan git branch.
Server Git sendiri: repositori bare
GitHub tidak wajib. Repositori remote bisa berupa mesin mana pun yang bisa Anda akses lewat SSH. Caranya, di server dibuat repositori «telanjang» (bare): tanpa direktori kerja, hanya isi .git:
# Di server
ssh user@server
git init --bare /srv/git/my-app.git
# Di komputer Anda
git remote add origin user@server:/srv/git/my-app.git
git push -u origin main
Agar tiga orang bisa bekerja dengan server seperti ini, cukup berikan rekan akses SSH ke folder repositori dan grup bersama dengan izin tulis. Untuk membagi hak akses per branch dan proyek, cara ini tidak lagi memadai, dan Anda membutuhkan layanan hosting Git yang lengkap.
Ke dalam repositori bare Anda tidak bisa «masuk dan mengedit berkas». Repositori ini hanya untuk pertukaran lewat push dan fetch. Begitulah cara kerja repositori di layanan hosting Git mana pun. Jika Anda membutuhkan antarmuka web, review, dan tugas, pasang solusi self-hosted seperti GitLab, Gitea, atau Forgejo.
Branch pelacakan: cara repositori lokal melihat server
Setelah remote dihubungkan dan dilakukan git fetch atau git push pertama, muncul branch remote seperti origin/main. Ini bukan branch di server, melainkan salinan lokal dari apa yang Anda lihat di server saat sinkronisasi terakhir. Salinan ini diperbarui hanya oleh fetch, pull, dan push.
Perbedaan ketiga perintah pertukaran ini penting:
| Perintah | Yang diubah |
|---|---|
git fetch | Memperbarui origin/*; branch dan berkas Anda tidak disentuh |
git pull | fetch + penggabungan origin/main ke branch aktif |
git push | Mengirim commit Anda dan memperbarui branch di server |
Untuk mengetahui seberapa jauh branch Anda tertinggal atau mendahului:
git fetch
git status -sb
## main...origin/main [ahead 2, behind 1]
Artinya ada dua commit Anda yang belum ada di server, dan satu commit di server yang belum Anda miliki. Sebelum push, commit dari server itu harus diambil dulu.
Hubungan branch lokal dengan branch remote (upstream) diatur oleh flag -u pada push pertama. Jika lupa, atur secara terpisah: git branch --set-upstream-to=origin/main. Untuk melihat semua hubungan ini, gunakan git branch -vv.
Beberapa repositori: monorepo atau satu per proyek
Pertanyaan yang sering dari pemula: berapa repositori Git yang sebaiknya dibuat. Aturan sederhananya: satu repositori untuk satu unit yang dikembangkan dan dirilis secara mandiri. Proyek latihan, proyek pribadi, dan layanan yang berdiri sendiri masing-masing punya repositori sendiri. Jangan membuat satu repositori untuk seluruh folder «Proyek Saya»: riwayatnya akan bercampur, dan sulit memamerkan satu proyek saja di portofolio.
Perusahaan besar kadang menyimpan seluruh kode dalam satu monorepo demi perubahan bersama dan satu build, tetapi itu keputusan arsitektur dengan alatnya sendiri. Pemula sebaiknya mulai dari aturan «satu proyek, satu repositori», dan tidak pernah menaruh satu repositori di dalam repositori lain tanpa submodul.
git init atau git clone
| Situasi | Perintah |
|---|---|
| Memulai proyek baru dari nol | git init |
| Ada folder kode tanpa kontrol versi | git init di folder itu |
| Proyek sudah ada di GitHub atau server | git clone <url> |
| Perlu repositori pusat di server sendiri | git init --bare |
Setelah git clone, remote origin sudah diatur dan tidak perlu ditambahkan secara manual.
Langkah demi langkah: dari folder sampai repositori di GitHub
- Buat folder proyek lalu jalankan
git init -b main. - Tambahkan
.gitignoredan README. - Buat commit pertama:
git add .dangit commit -m "Initial commit". - Buat repositori kosong di GitHub — tanpa README, lisensi, dan .gitignore.
- Hubungkan:
git remote add origin <alamat>. - Kirim kode:
git push -u origin main. - Selanjutnya bekerja dengan siklus: ubah berkas →
git add→git commit→git push.
Ringkasan
Repositori Git adalah proyek Anda beserta folder .git yang berisi seluruh riwayat. Repositori dibuat dengan git init, dan koneksi ke server diatur dengan git remote add origin serta push pertama dengan git push -u. Remote bisa berupa GitHub, GitLab, atau server Git sendiri berisi repositori bare. Membuat repositori pertama, index, dan menghubungkan remote dibahas dengan praktik dalam kursus Git.
Pertanyaan umum
Bagaimana cara menghapus repositori Git tetapi tetap menyimpan berkasnya?
Hapus folder tersembunyi .git di root proyek: rm -rf .git di Linux dan macOS. Berkasnya tetap ada, tetapi seluruh riwayat versi akan hilang.
Bisakah git init dijalankan di folder yang sudah berisi repositori?
Bisa dan aman. Git akan memberi tahu Reinitialized existing Git repository dan tidak mengubah riwayat; perintah itu hanya melengkapi berkas pendukung yang belum ada.
Berapa banyak remote yang bisa dihubungkan ke satu repositori?
Berapa pun. Misalnya origin untuk fork Anda dan upstream untuk proyek asli; cara ini umum dipakai dalam pengembangan open source.
Di mana pengaturan repositori tertentu disimpan?
Di berkas .git/config. Pengaturan pengguna global ada di ~/.gitconfig dan diatur dengan git config --global.
Apa bedanya repositori bare dengan repositori biasa?
Repositori bare tidak punya direktori kerja berisi berkas, hanya data internal Git. Repositori ini dipakai sebagai repositori pusat di server yang menjadi tujuan push.
Topik ini dibahas mendalam dengan praktik di kursus “Git dari Nol hingga Pengembang Percaya Diri”.
- Repositori Pertama: init, add, commit dan Keajaiban Indeks
- GitHub dan Repositori Jarak Jauh: Kode Anda di Awan