git clone: cara mengkloning repositori dari GitHub dan lainnya
git clone mengunduh repositori remote secara utuh, yaitu semua berkas, seluruh riwayat commit, dan cabang, lalu membuat salinan lokal dengan remote origin yang sudah terhubung. Pemakaian dasarnya git clone alamat-repositori. Opsi memungkinkan memilih folder, cabang, atau hanya mengunduh commit terakhir dengan --depth 1.
Perintah git clone membuat salinan lokal lengkap dari repositori remote: berkas, seluruh riwayat commit, cabang, dan tag. Ini cara standar untuk mulai bekerja dengan proyek yang sudah ada di GitHub, GitLab, atau server perusahaan. Berbeda dengan mengunduh arsip ZIP, hasil kloning adalah repositori penuh yang bisa dipakai untuk commit dan mengirim perubahan kembali.
Penggunaan dasar git clone
Salin alamat repositori (di GitHub, tombol hijau «Code») lalu jalankan:
git clone https://github.com/username/project.git
Cloning into 'project'...
remote: Enumerating objects: 1532, done.
remote: Counting objects: 100% (1532/1532), done.
remote: Compressing objects: 100% (812/812), done.
Receiving objects: 100% (1532/1532), 2.41 MiB | 6.10 MiB/s, done.
Resolving deltas: 100% (701/701), done.
Git akan membuat folder project di direktori saat ini (namanya diambil dari alamat tanpa .git). Setelah itu, masuk ke dalam folder tersebut:
cd project
git status
Apa yang dilakukan git clone di balik layar
Kloning bukan sekadar mengunduh berkas. Memahami langkah-langkahnya menjelaskan mengapa setelah kloning semuanya «langsung berfungsi» dan dari mana cabang dengan awalan origin/ berasal. Secara berurutan, perintah ini:
- membuat folder dan menjalankan semacam
git initdi dalamnya; - menambahkan remote bernama
originyang menunjuk ke alamat sumber; - mengunduh semua objek dan referensi — setara dengan
git fetch; - membuat cabang remote
origin/main,origin/develop, dan seterusnya; - membuat cabang lokal default (biasanya
main), menghubungkannya denganorigin/main, dan menampilkan berkasnya.
Karena itu, setelah kloning Anda tidak perlu mengatur git remote secara manual; git push dan git pull langsung bisa dipakai.
git remote -v
origin https://github.com/username/project.git (fetch)
origin https://github.com/username/project.git (push)
Kloning lewat HTTPS dan SSH
| HTTPS | SSH | |
|---|---|---|
| Alamat | https://github.com/user/repo.git | git@github.com:user/repo.git |
| Repositori publik | Bisa dikloning tanpa login | Perlu kunci SSH yang sudah ditambahkan ke akun |
| Repositori privat, push | Perlu Personal Access Token sebagai pengganti kata sandi | Berjalan dengan kunci, tanpa memasukkan kata sandi |
| Jaringan perusahaan | Port 443 hampir selalu terbuka | Port 22 kadang diblokir |
Untuk membaca proyek open source milik orang lain, HTTPS sudah cukup. Untuk repositori Anda sendiri yang sering di-push, SSH lebih praktis:
git clone git@github.com:username/project.git
Jika sudah terlanjur mengklon lewat HTTPS dan ingin beralih ke SSH, tidak perlu mengunduh ulang:
git remote set-url origin git@github.com:username/project.git
Kloning ke folder tertentu
Argumen kedua adalah nama atau path folder tujuan:
# Ke folder dengan nama lain
git clone https://github.com/username/project.git my-copy
# Ke folder saat ini (harus kosong)
git clone https://github.com/username/project.git .
Jika folder tujuan sudah ada dan tidak kosong, Git akan menolak: fatal: destination path 'project' already exists and is not an empty directory.
Kloning cabang tertentu
Secara default, setelah kloning Anda berada di cabang default repositori remote. Untuk langsung berpindah ke cabang lain, gunakan -b (--branch):
git clone -b develop https://github.com/username/project.git
Perlu diperhatikan: semua cabang tetap diunduh, Anda hanya langsung berada di develop. Jika hanya ingin satu cabang tanpa cabang lain, tambahkan --single-branch:
git clone -b develop --single-branch https://github.com/username/project.git
Flag -b juga menerima nama tag. Dengan begitu Anda mendapatkan keadaan proyek pada saat rilis (dalam mode detached HEAD):
git clone -b v2.1.0 --depth 1 https://github.com/username/project.git
Di mana cabang lainnya setelah kloning
Pemula sering heran karena git branch hanya menampilkan main. Cabang lain sudah diunduh sebagai cabang remote, dan Anda bisa melihatnya dengan:
git branch -a
* main
remotes/origin/HEAD -> origin/main
remotes/origin/develop
remotes/origin/feature/login
Untuk mulai bekerja di salah satunya, cukup pindah dengan nama pendeknya. Git akan membuat cabang lokal yang melacak cabang remote tersebut:
git switch develop
Kloning dangkal: --depth untuk repositori besar
Riwayat proyek lama bisa mencapai gigabyte. Jika yang Anda butuhkan hanya kode terbaru, misalnya di CI atau sekadar untuk membangun proyek, unduh commit terakhir saja:
git clone --depth 1 https://github.com/username/big-project.git
Flag --depth otomatis mengaktifkan --single-branch, sehingga hanya cabang default dengan satu commit yang diunduh. Jika nanti Anda membutuhkan seluruh riwayat, unduh sisanya:
git fetch --unshallow
Kedalaman lain juga bisa ditentukan, misalnya --depth 50, atau riwayat dibatasi berdasarkan tanggal dengan --shallow-since=2025-01-01. Untuk pengembangan aktif, kloning dangkal kurang nyaman: git log, git blame, dan pencarian di riwayat akan tidak lengkap.
Kloning parsial: --filter
Alternatif untuk monorepo yang sangat besar adalah mengunduh riwayat commit, sementara isi berkas diambil saat dibutuhkan:
git clone --filter=blob:none https://github.com/username/monorepo.git
Dengan cara ini riwayat lengkap tetap tersedia untuk log dan perpindahan cabang, tetapi lalu lintas data dan ruang disk lebih hemat. Fitur ini membutuhkan dukungan dari server; GitHub dan GitLab mendukungnya.
Kloning mirror dan memindahkan repositori
Kloning biasa mengambil cabang sebagai cabang remote dan tidak menyalin referensi internal server. Untuk memindahkan proyek ke hosting lain atau membuat cadangan yang identik, gunakan --mirror:
git clone --mirror https://github.com/username/project.git
cd project.git
git push --mirror git@gitlab.com:username/project.git
Mirror adalah repositori bare tanpa berkas kerja, yang menyimpan semua cabang dan tag sebagai cabang dan tag lokal. Perintah git push --mirror akan mengirim semuanya ke server baru, sehingga riwayat berpindah tanpa kehilangan apa pun. Namun perlu diingat bahwa tugas (issue), pull request, dan pengaturan hosting tidak ikut berpindah, karena itu data layanan, bukan Git.
Flag --bare juga membuat repositori tanpa direktori kerja, tetapi hanya menyalin cabang dan tag. Ini cocok untuk membuat repositori pusat di server sendiri dari proyek yang sudah ada.
Kloning dengan submodul
Jika proyek memakai git submodule, folder submodulnya akan kosong secara default. Untuk mengunduh semuanya sekaligus:
git clone --recurse-submodules https://github.com/username/project.git
Jika sudah terlanjur mengklon tanpa flag ini, unduh submodulnya dengan:
git submodule update --init --recursive
git clone, fork, dan unduhan ZIP
| Cara | Yang didapat | Kapan dipakai |
|---|---|---|
git clone | Repositori lengkap dengan riwayat dan remote | Mengerjakan proyek yang Anda punya aksesnya atau butuh riwayatnya |
| Fork di GitHub | Salinan repositori di akun Anda di server | Berkontribusi ke proyek orang lain lewat pull request |
| Download ZIP | Hanya berkas, tanpa .git | Sekadar melihat kode, tidak berencana commit |
Fork dan clone tidak saling bersaing. Dalam proyek open source, biasanya Anda membuat fork di situs terlebih dahulu, lalu mengklon fork milik Anda dan menambahkan repositori asli sebagai remote kedua:
git clone git@github.com:me/project.git
cd project
git remote add upstream https://github.com/author/project.git
git fetch upstream
Kesalahan umum pada git clone
«Repository not found»
Alamatnya salah ketik, atau repositorinya privat dan Anda tidak punya akses. GitHub sengaja menjawab «not found» untuk repositori privat, bukan «akses ditolak». Periksa alamatnya dan pastikan Anda login dengan akun yang benar.
«Permission denied (publickey)»
Kloning dilakukan lewat SSH, tetapi kuncinya belum diatur. Jalankan ssh -T git@github.com, tambahkan kunci publik ke pengaturan akun, atau untuk sementara kloning lewat HTTPS.
«Authentication failed» lewat HTTPS
Anda memasukkan kata sandi akun. GitHub sudah lama mewajibkan Personal Access Token sebagai pengganti kata sandi untuk operasi Git lewat HTTPS. Jika Git menyimpan kredensial yang salah, hapus dari pengelola kredensial sistem Anda.
Kloning terputus di repositori besar
Error seperti early EOF atau RPC failed biasanya disebabkan jaringan yang tidak stabil atau ukuran repositori. Solusinya: kloning dangkal dengan --depth 1 lalu git fetch --unshallow, atau kloning lewat SSH.
Masalah pergantian baris di Windows
Setelah kloning, semua berkas tampak «berubah». Ini efek konversi CRLF/LF. Di Windows atur git config --global core.autocrlf true (atau input di Linux dan macOS), dan sebaiknya tetapkan aturannya di .gitattributes proyek.
Yang perlu dilakukan setelah kloning
Kloning sudah selesai, tetapi sebelum mengubah kode, luangkan beberapa menit untuk persiapan. Ini mencegah masalah umum di hari pertama bekerja dengan proyek orang lain.
- Baca README dan CONTRIBUTING. Biasanya di sana dijelaskan cara memasang dependensi, menjalankan tes, dan konvensi penamaan cabang.
- Periksa cabang dan kondisi repositori.
git statusdangit log --oneline -5menunjukkan posisi Anda dan perubahan terakhir. - Buat cabang sendiri. Jangan bekerja langsung di
main:git switch -c feature/my-task. - Periksa penulis commit. Jika di komputer ada beberapa akun (pribadi dan kerja), atur e-mail khusus untuk repositori ini tanpa
--global:git config user.email "you@company.com". - Pasang dependensi. Folder seperti
node_modulesatauvenvtidak disimpan di repositori; dibuat secara lokal dengannpm install,pip install -r requirements.txt, dan sejenisnya.
Menjaga salinan lokal tetap mutakhir
Kloning hanya dilakukan sekali. Setelahnya, commit baru dari rekan tim diambil dari origin yang sama:
# Lihat apa yang ada di server tanpa mengubah apa pun
git fetch
git log --oneline main..origin/main
# Gabungkan perubahan ke cabang aktif
git pull
Kebiasaan menjalankan git fetch dulu dan melihat apa yang datang dapat mencegah konflik yang tidak terduga. Tidak perlu mengklon ulang proyek hanya untuk memperbaruinya, karena cara itu bisa menghilangkan cabang lokal dan pekerjaan yang belum di-commit.
Contekan git clone
| Tugas | Perintah |
|---|---|
| Kloning biasa | git clone <url> |
| Ke folder sendiri | git clone <url> <folder> |
| Langsung di cabang tertentu | git clone -b <cabang> <url> |
| Hanya satu cabang | git clone -b <cabang> --single-branch <url> |
| Tanpa riwayat | git clone --depth 1 <url> |
| Tanpa isi berkas lama | git clone --filter=blob:none <url> |
| Dengan submodul | git clone --recurse-submodules <url> |
| Salinan bare untuk server | git clone --bare <url> |
Ringkasan
git clone mengunduh repositori secara utuh dan langsung menyiapkan hubungan dengan server lewat origin, sehingga setelahnya Anda bisa commit, push, dan pull tanpa konfigurasi tambahan. Untuk proyek sendiri gunakan SSH, untuk repositori besar gunakan --depth atau --filter, dan untuk cabang tertentu gunakan -b. Bekerja dengan repositori remote, push, pull, dan fetch dibahas dengan praktik dalam kursus Git.
Pertanyaan umum
Apa bedanya git clone dengan git pull?
git clone dijalankan sekali dan membuat salinan repositori baru di komputer Anda. git pull dijalankan di dalam salinan yang sudah ada dan mengambil perubahan baru dari server.
Bisakah hanya satu folder dari repositori yang dikloning?
Tidak secara langsung. Pendekatan terdekat adalah kloning parsial dengan --filter=blob:none --sparse lalu git sparse-checkout set path, sehingga hanya folder yang dibutuhkan muncul di direktori kerja.
Seberapa besar ruang yang dipakai hasil kloning?
Kurang lebih sebesar seluruh riwayat dalam bentuk terkompresi ditambah berkas versi terbaru. Ukuran repositori bisa dicek dengan git count-objects -vH.
Bisakah mengklon repositori lokal?
Bisa. Ganti alamat dengan path, misalnya git clone /path/ke/repo salinan. Ini berguna untuk bereksperimen tanpa mengambil risiko pada salinan utama.
Apakah perlu menjalankan git init sebelum git clone?
Tidak. git clone sudah membuat folder dan menginisialisasi repositori di dalamnya.
Topik ini dibahas mendalam dengan praktik di kursus “Git dari Nol hingga Pengembang Percaya Diri”.
Ke kursus