Panduan

Repositori Git: cara membuat dengan git init dan menghubungkan remote

Diperbarui: · Skillaria.Top

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 lewat git 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:

ElemenIsinya
objects/Objek terkompresi: isi berkas (blob), struktur folder (tree), dan commit
refs/heads/Branch — berkas berisi hash commit terakhir
refs/tags/Tag
HEADPenunjuk ke branch aktif, misalnya ref: refs/heads/main
configPengaturan repositori ini, termasuk daftar remote
indexKeadaan 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

PerintahFungsi
git remote -vDaftar 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 oldMengganti nama remote
git remote remove oldMenghapus remote (server itu sendiri tidak tersentuh)
git remote show originRincian: 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.git atau file:///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:

PerintahYang diubah
git fetchMemperbarui origin/*; branch dan berkas Anda tidak disentuh
git pullfetch + penggabungan origin/main ke branch aktif
git pushMengirim 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

SituasiPerintah
Memulai proyek baru dari nolgit init
Ada folder kode tanpa kontrol versigit init di folder itu
Proyek sudah ada di GitHub atau servergit clone <url>
Perlu repositori pusat di server sendirigit init --bare

Setelah git clone, remote origin sudah diatur dan tidak perlu ditambahkan secara manual.

Langkah demi langkah: dari folder sampai repositori di GitHub

  1. Buat folder proyek lalu jalankan git init -b main.
  2. Tambahkan .gitignore dan README.
  3. Buat commit pertama: git add . dan git commit -m "Initial commit".
  4. Buat repositori kosong di GitHub — tanpa README, lisensi, dan .gitignore.
  5. Hubungkan: git remote add origin <alamat>.
  6. Kirim kode: git push -u origin main.
  7. 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.

Pelajari topik ini lewat video

Topik ini dibahas mendalam dengan praktik di kursus “Git dari Nol hingga Pengembang Percaya Diri”.

Ke kursus