URL dan Protokol Git
Seperti terlihat pada contoh pengkloningan repositori “aws-cli” di atas, untuk mengkloning repositori menggunakan git clone, kita perlu menyediakan lokasi repositori jarak jauh, yang dilakukan melalui URL Git.
Git mendukung berbagai protokol untuk mengakses repositori jarak jauh, masing-masing dengan struktur, model keamanan, dan kasus penggunaan terbaiknya. Memahami berbagai jenis URL Git dan kapan menggunakannya dapat membantu Anda bekerja dengan lebih aman dan efisien, terutama saat berkolaborasi lintas tim atau mengotomatisasi deployment.
Jenis-jenis URL Git
Saat mengkloning repositori, URL yang Anda berikan memberi tahu Git cara terhubung ke server jarak jauh. Jenis URL Git yang paling umum adalah:
HTTPS
Hyper Text Transfer Protocol Secure (HTTPS). Paling umum digunakan untuk mengakses halaman web melalui browser. Jenis URL ini mudah digunakan dan tidak memerlukan penyiapan apa pun saat mengkloning repositori publik. Berikut beberapa contohnya:
git clone https://github.com/<username>/<repo>.git
git clone https://github.com/aws/aws-cli.git
git clone https://gitlab.com/gitlab-org/gitlab.git
Rincian Struktur:
https://– Protokol yang digunakan untuk komunikasi (aman dan ramah firewall).github.com– Domain layanan hosting Git.username/repo.git– Jalur ke repositori:usernameadalah pemilik (pengguna atau organisasi)repo.gitadalah nama repositori Git
SSH
Secure Shell (SSH). Protokol jaringan terautentikasi yang mengharuskan Anda menyiapkan kredensial dengan server hosting sebelum terhubung. Membutuhkan pembuatan pasangan kunci SSH dan menambahkan kunci publik ke penyedia Git Anda (misalnya, GitHub, GitLab)
git clone [email protected]:<username>/<repo>.git
git clone [email protected]:aws/aws-cli.git
git clone [email protected]:gitlab-org/gitlab.git
Rincian Struktur:
git@– Menentukan akun pengguna SSH (biasanya hanya git).github.com:– Domain server Git, diikuti tanda titik dua : (bukan garis miring).username/repo.git– Jalur ke repositori di server.
Karena saya belum mengonfigurasi kunci SSH apa pun di akun GitHub saya, pesan berikut ditampilkan saat saya mencoba menyalin URL SSH.

Tidak ada kunci SSH yang disetel
Saya akan membahas penyiapan kunci SSH di bagian berikutnya.
GIT
Protokol ringan tanpa autentikasi untuk akses baca-saja. Ini adalah protokol yang khas untuk git. Kini jarang digunakan karena masalah keamanan dan telah ditinggalkan oleh penyedia besar seperti GitHub dan GitLab. Anda bahkan tidak akan menemukan opsi untuk mengkloning menggunakan protokol git di GitHub atau GitLab.
# Not recommended
git clone git://github.com/<username>/<repo>.git
Rincian Struktur:
git//– Protokol Git (baca-saja, tanpa autentikasi).github.com:– Domain server Git.username/repo.git– Jalur ke repositori di server.
Terlepas dari protokol kloning yang digunakan, Anda dapat memeriksa URL dan protokol yang digunakan dengan menjalankan perintah berikut:
git remote -v
git remote show origin
Memilih protokol URL yang tepat
Setiap protokol memiliki kompromi. Dengan tabel berikut, kita membandingkan pro dan kontra dalam memilih protokol yang tepat untuk kasus penggunaan Anda.
|
Protokol |
Kasus penggunaan |
Kelebihan |
Kekurangan |
|
HTTPS |
Ideal untuk pemula dan alat CI |
Mudah digunakan, ramah firewall |
Memerlukan memasukkan kredensial atau menyiapkan personal access token (PAT). Dapat diminimalkan dengan credential helper. |
|
SSH |
Terbaik untuk kontributor yang sering |
Aman, tanpa login berulang |
Memerlukan penyiapan dan manajemen kunci |
|
Git |
Arsip atau kloning publik baca-saja |
Cepat, ringan |
Tidak aman, sebagian besar sudah ditinggalkan |
Prosedur Kloning Spesifik Protokol
Setelah Anda memilih protokol URL Git, proses kloning dan alur kerja autentikasinya akan berbeda. Meskipun keduanya pada akhirnya mencapai tujuan yang sama (mengkloning repositori jarak jauh ke mesin lokal Anda), keduanya melayani preferensi keamanan, kebutuhan pengguna, dan kompleksitas penyiapan yang berbeda.
Di bagian ini, saya akan membahas pengkloningan repositori menggunakan HTTPS dan SSH, beserta praktik terbaik, langkah penyiapan, dan saran pemecahan masalah agar proses kloning aman dan lancar.
Alur kerja kloning Git melalui HTTPS
Mengkloning repositori Git melalui HTTPS adalah metode paling sederhana, ideal untuk pemula dan lingkungan terbatas (seperti firewall perusahaan atau jaringan terbatas).
Untuk mengkloning repositori, buka repositori tersebut dan salin URL HTTPS. Gambar berikut diambil dari GitHub. Akan serupa pada penyedia Git Anda.

Dapatkan URL HTTPS dari repositori di GitHub
Setelah itu, jalankan perintah git clone di tujuan (misalnya, laptop Anda atau pipeline CI/CD) tempat Anda ingin repositori dikloning.
git clone https://github.com/aws/aws-cli.git

Perintah dasar git clone
Untuk mengkloning repositori publik, seperti yang kita lakukan untuk repositori “aws-cli”, autentikasi tidak diperlukan karena repositorinya bersifat publik. Selama Anda memiliki git terpasang di sistem, Anda dapat segera mengkloning repo publik tanpa konfigurasi apa pun.
Namun, jika Anda mengkloning repositori privat, autentikasi diperlukan. Anda dapat melakukan autentikasi melalui:
- Personal Access Token
- Passkey
Untuk mendemonstrasikan autentikasi melalui personal access token, saya menyiapkan sebuah server di AWS EC2 dan memasang Git. Saat menjalankan perintah git clone pada repositori privat, sistem meminta nama pengguna dan kata sandi. Masukkan nama pengguna GitHub Anda sebagai username dan personal access token sebagai password.

Autentikasi HTTPS melalui nama pengguna/kata sandi
Karena kebijakan keamanan yang ditingkatkan, GitHub dan penyedia lainnya kini mewajibkan personal access token alih-alih kata sandi.

Instruksi akses token untuk kloning dengan URL HTTPS. Sumber: GitHub
Anda akan menjumpai galat berikut jika tidak memasukkan personal access token:
![]()
Dukungan autentikasi kata sandi telah dihapus.
Untuk membuat personal access token, buka Create a GitHub Token dan ikuti instruksinya:

Buat personal access token di GitHub
Untuk menghindari memasukkan personal access token setiap kali Git memerlukan autentikasi melalui HTTPS, Anda dapat menggunakan credential helper untuk menyimpan kredensial Anda secara aman. Salah satu opsi populer adalah Git Credential Manager.
Di macOS, Git terintegrasi mulus dengan macOS Keychain, yang secara pribadi saya gunakan untuk menyimpan kredensial. Dalam kasus saya, saya melakukan autentikasi menggunakan passkey yang tersimpan di Keychain, sehingga pengalaman menjadi aman dan mulus.

Lihat credential helper

Passkey di MacOS
Untuk menyiapkan passkey, buka setelan password and authentication settings GitHub dan ikuti petunjuknya.

Buat passkey di GitHub
Meskipun GitHub memungkinkan Anda membuat personal access token tanpa kedaluwarsa, sebagian besar organisasi menerapkan kebijakan keamanan yang mewajibkan token memiliki tanggal kedaluwarsa. Artinya, jika token digunakan di lingkungan otomatis, seperti pipeline CI/CD, dan token tersebut kedaluwarsa, pipeline akan gagal karena galat autentikasi. Penting untuk secara proaktif membuat ulang token sebelum kedaluwarsa dan memperbarui penggunaannya.
Tanpa kontrol yang memadai, pengembang dapat tanpa sengaja membuat dan menggunakan banyak personal access token tanpa dokumentasi atau pelacakan yang jelas. Ini dengan cepat dapat menimbulkan kebingungan tentang token mana yang digunakan dan di mana, sehingga pemeliharaan dan audit menjadi lebih sulit. Untuk kebersihan yang lebih baik, disarankan untuk menjaga penggunaan token seminimal mungkin, didokumentasikan, dan terkait dengan kasus penggunaan tertentu.
Metodologi kloning SSH
SSH menawarkan metode autentikasi yang aman dan persisten, sangat cocok untuk kontributor rutin dan pengguna tingkat lanjut. Setelah dikonfigurasi, SSH menyediakan cara mulus untuk berinteraksi dengan repositori tanpa permintaan kredensial berulang.
Untuk menyiapkan autentikasi SSH, pertama-tama kita harus membuat pasangan kunci SSH, yang terdiri dari kunci publik dan privat.
# ed25519 specifies the key type
ssh-keygen -t ed25519 -C "[email protected]"

Buat pasangan kunci SSH
Karena saya sudah memiliki kunci SSH di ~/.ssh/id_ed25519, saya menimpa direktori bawaan tempat kunci akan disimpan. Namun jika Anda membuat kunci SSH untuk pertama kali di perangkat Anda, terima direktori bawaan.
Buka SSH and GPC keys in GitHub untuk menyiapkan kunci SSH Anda.

Setel kunci SSH di GitHub
Salin isi kunci publik ke bagian “Key”. Dalam kasus saya, itu adalah isi dari id_ed25519.pub.

Tempelkan isi id_ed25519.pub
SSH menggunakan enkripsi kunci publik/privat. Jaga kunci privat Anda tetap aman di mesin Anda. Dengan itu, Anda siap mengkloning repositori, baik publik maupun privat, melalui SSH.
Setelah berhasil menyiapkan SSH, memilih URL SSH tidak lagi menampilkan pesan peringatan, seperti terlihat pada bagian “Jenis-jenis URL Git” di atas.

Dapatkan URL SSH dari repositori di GitHub
Karena kunci privat SSH berada di perangkat lokal saya, saya akan mendemonstrasikan git clone menggunakan SSH di lokal saya, bukan di server EC2.
git clone [email protected]:aws/aws-cli.git

Kloning repositori publik dan privat menggunakan SSH
Kita telah berhasil melakukan operasi git clone menggunakan SSH!
Keuntungan SSH mencakup keamanannya dan penggunaannya yang luas di organisasi, karena memungkinkan autentikasi tanpa kata sandi, ideal untuk interaksi yang sering. Koneksi SSH juga tahan terhadap gangguan jaringan dan sering kali lebih cepat daripada HTTPS pada jarak jauh.
Namun, pengembang kerap mengalami masalah saat penyiapan kunci SSH karena menyalin kunci publik yang salah ke penyedia Git. Jika Anda memiliki beberapa kunci privat untuk keperluan berbeda, Anda perlu mendefinisikan di file ~/.ssh/config kunci mana yang digunakan per host. Jika tidak, saat melakukan autentikasi ke GitHub, kunci privat yang dimaksudkan untuk Bitbucket bisa saja digunakan, sehingga menyebabkan kegagalan autentikasi.
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
Untuk menguji konektivitas dan memverifikasi kunci yang digunakan:
![]()
Verifikasi konektivitas SSH
Contoh Penggunaan git clone
Contoh git clone sejauh ini mencakup fungsionalitas dasar yang disediakan perintah tersebut.
Pada bagian ini, saya akan memandu Anda melalui berbagai opsi perintah yang memungkinkan Anda menyesuaikan proses cloning repositori ke mesin lokal Anda. Baik Anda bekerja dengan branch tertentu maupun mengoptimalkan kecepatan, memahami variasi ini akan membantu Anda menggunakan git clone dengan lebih efektif.
Clone repositori dasar
Penggunaan git clone yang paling sederhana, seperti yang telah kita lihat, melibatkan cloning repositori remote ke mesin lokal Anda.
# HTTPS protocol
git clone https://github.com/aws/aws-cli.git
# SSH protocol
git clone [email protected]:aws/aws-cli.git
Perintah ini membuat folder bernama "aws-cli" dan menginisialisasi salinan lokal repositori di dalamnya, lengkap dengan riwayat versi dan pengaturan pelacakan remote.
Cloning ke folder tertentu
Secara bawaan, git clone membuat direktori yang dinamai sesuai repo. Untuk menentukan nama direktori target yang berbeda, cukup berikan sebagai argumen kedua.
Ini akan meng-clone konten aws-cli.git ke folder lokal bernama my-project-folder:
git clone https://github.com/aws/aws-cli.git my-project-folder

Cloning ke folder tertentu
Cloning branch atau tag tertentu
Gunakan flag --branch (atau -b) untuk checkout ke branch yang ditentukan setelah meng-clone semua branch dari remote. Branch yang ditentukan menjadi “HEAD” yang di-checkout dengan branch lain tersedia secara lokal untuk checkout.
Menggunakan contoh repositori "aws-cli", branch default adalah develop. Mari coba cloning dan checkout ke branch master sebagai gantinya.
# Clone a branch
git clone --branch master https://github.com/aws/aws-cli.git

Cloning branch tertentu
Kita juga bisa meng-clone tag tertentu:
# Clone a tag (read-only snapshot)
git clone --branch 2.27.43 https://github.com/aws/aws-cli.git

Cloning tag tertentu
Flag ini berguna saat bekerja pada versi tertentu atau branch terkait lingkungan (misalnya, staging, hotfix, atau release).
Shallow clone (berbatas kedalaman)
Jika Anda hanya memerlukan versi terbaru dari proyek tanpa seluruh riwayat commit, gunakan flag --depth untuk melakukan shallow clone. Flag --depth menentukan berapa banyak commit yang ingin Anda clone.
# Download only the latest commit history
git clone --depth 1 https://github.com/aws/aws-cli.git
Shallow clone
Ini mempercepat proses cloning dan mengurangi penggunaan disk, ideal untuk pipeline CI/CD atau saat Anda tidak memerlukan riwayat commit. Ini sangat berguna untuk repositori “aws-cli” yang telah kita clone. Karena repositori “aws-cli” memiliki riwayat commit yang panjang, perbedaan waktu saat menyertakan flag --depth sangat besar.
Perbedaan waktu dengan dan tanpa shallow clone
Menghilangkan riwayat commit selain yang terbaru membantu mengurangi jumlah informasi yang harus diunduh, sehingga mengurangi waktu yang diperlukan.
Konfigurasi Cloning Lanjutan
Meskipun perintah git clone paling sering digunakan dalam bentuk dasarnya, Git menawarkan beberapa opsi lanjutan yang memberikan kontrol, efisiensi, dan kustomisasi lebih besar selama proses cloning.
Fitur-fitur ini sangat berguna saat berhadapan dengan repositori besar, mengelola repositori level infrastruktur, atau mengoptimalkan untuk alur kerja pengembangan tertentu.
Pada bagian ini, kita akan mengeksplorasi operasi khusus branch, clone dangkal dan parsial, spesialisasi repositori, serta konfigurasi cloning terperinci yang mendukung pengembang dan engineer DevOps.
Operasi cloning khusus branch
Secara bawaan, git clone mengambil semua branch dan melakukan checkout ke branch default. Namun, saat bekerja dengan repositori besar atau berkontribusi pada fitur tertentu, sering kali lebih efisien untuk meng-clone hanya satu branch. Ini dapat dilakukan menggunakan flag --single-branch.
git clone --branch <branch-name> --single-branch <repo-url>
git clone --branch feature/cliq --single-branch https://github.com/aws/aws-cli.git
Clone branch tertentu
Keuntungannya termasuk ukuran dan waktu unduhan yang berkurang, penyiapan yang lebih cepat untuk pengembangan spesifik fitur, dan menghindari riwayat branch yang tidak perlu.
Pendekatan ini ideal ketika Anda ingin bekerja pada branch rilis atau menghindari mengunduh semua branch pada repositori CI/CD aktif. Jika nama branch tidak ditentukan dalam perintah, Git hanya akan meng-clone branch default.
Untuk memahami lebih jauh tentang cloning branch tertentu, lihat tutorial Git Clone Branch.
Jenis repositori khusus
Saat kita meng-clone sebuah repositori, dua komponen yang di-clone: repositori (.git folder) dan working directory. Working directory juga sering disebut sebagai working copy, work tree, atau workspace.

Perbedaan antara working directory dan repository
Isi folder .git adalah sebagai berikut:

Isi folder .git
Ini membawa kita ke topik repositori bare.
Repositori bare
Repositori bare hanya berisi folder .git dan tidak memiliki working directory.
git clone --bare <repo-url>
git clone --bare https://github.com/aws/aws-cli.git

Clone repositori bare
Dari ilustrasi di atas, kita dapat melihat bahwa isi yang di-clone menggunakan flag --bare hanyalah isi folder .git dari repositori non-bare. Karena ini adalah repositori bare, tidak ada working directory, yang berarti kita tidak bisa menjalankan perintah git, seperti terlihat pada gambar berikut:
Operasi harus dijalankan di work tree
Repositori bare biasanya digunakan sebagai repositori pusat di lingkungan bersama untuk kolaborasi atau mirroring, bukan untuk pengembangan aktif. Untuk mendemonstrasikan cloning dari repositori bare, saya akan menggunakan repositori bare “aws-cli” yang saya miliki secara lokal.

Clone dari repositori bare lokal saya
Kita dapat melihat bahwa repositori “aws-cli-non-bare” ini berisi working directory. Jalankan git remote -v untuk melihat bahwa ia mereferensikan repositori bare.
Repositori mirror
Perintah git clone --mirror menyiapkan cerminan dari repositori sumber. Flag --mirror menyiratkan --bare, yang berarti repositori mirror juga tidak berisi working directory.
git clone --mirror <repo-url>
git clone --mirror https://github.com/aws/aws-cli.git

Clone repositori (pusat) untuk membuat repositori mirror
Namun, dibandingkan dengan --bare, --mirror tidak hanya memetakan branch lokal dari sumber ke branch lokal di target, tetapi juga memetakan semua ref (termasuk remote-tracking branches, catatan, dll.) dan menyiapkan konfigurasi refspec sehingga git remote update di repositori target akan menimpa semua ref tersebut. Ini memberi kita salinan yang lebih komprehensif, termasuk semua referensi (branch, tag, dll.).
Anda dapat merujuk ke dokumentasi GitHub untuk langkah lengkap melakukan mirror repositori.

Melakukan mirror repositori di lokasi lain. Sumber: GitHub
Filter partial clone dan pengurangan ukuran clone
Partial clone memungkinkan pengguna mengambil hanya subset objek repositori menggunakan flag --filter, sehingga cocok untuk pengembang yang hanya membutuhkan sebagian codebase, terutama pada lingkungan dengan keterbatasan bandwidth atau disk. Beberapa contoh umum flag --filter adalah:
--filter=blob:none: melewati konten file (blob)--filter=blob:limit=<size>: mengecualikan file berukuran tertentu ke atas--filter=tree:<depth>: mengabaikan semua blob dan tree yang kedalamannya dari root tree lebih dari atau sama dengan kedalaman yang ditetapkan.
blob:none
Flag --filter=blob:none digunakan untuk mengoptimalkan operasi cloning dengan menghindari pengunduhan langsung konten file (blob).
# Binary Large Objects (BLOB)
git clone --filter=blob:none <repo-url>
git clone --filter=blob:none https://github.com/aws/aws-cli.git

Clone dengan filter=blob:none
Ini sangat berguna pada repositori besar atau ketika hanya subset proyek yang dibutuhkan. Misalnya, di monorepo, tidak semua tim atau pengembang memerlukan seluruh codebase.
Seorang engineer frontend yang hanya bekerja di frontend/ tidak membutuhkan layanan backend atau pustaka bersama. Menggunakan flag --filter mempercepat cloning dan mengurangi penyimpanan dengan menunda unduhan blob hingga diperlukan (misalnya, saat file dibuka). Gambar berikut menunjukkan apa yang dilakukan Git di latar belakang ketika saya membuka file, mengunduh blob file sesuai permintaan.

Git mengunduh blob file sesuai permintaan
Contoh lain adalah pada pipeline CI/CD. Pipeline sering kali tidak memerlukan seluruh riwayat repo atau setiap file. Saat digabungkan dengan sparse-checkout, --filter=blob:none memungkinkan pipeline meng-clone hanya direktori yang relevan (misalnya, skrip deployment).
blob:limit=<size>
Flag --filter=blob:limit=<size> berguna bagi pengembang yang ingin menghindari pengunduhan file besar (blob) saat cloning, sambil tetap mengambil file yang lebih kecil secara langsung. Ini adalah bagian dari fungsionalitas partial clone Git dan sangat membantu saat bekerja dengan repositori yang berisi konten berukuran campuran.
Sebagai contoh, dalam beberapa proyek, terutama yang menggunakan Git LFS atau memiliki aset media yang di-commit (misalnya, video, dataset besar, aset gim), pengembang mungkin ingin melewati file besar saat cloning, sehingga mempercepat clone awal sambil menunda pengunduhan file besar sampai benar-benar diperlukan.
# Binary Large Objects (BLOB)
git clone --filter=blob:limit=<size> <repo-url>
# The suffixes k, m, and g can be used to name units in KiB, MiB, or GiB
git clone --filter=blob:limit=<n>[kmg] <repo-url>
git clone --filter=blob:limit=1m https://github.com/aws/aws-cli.git

Clone dengan filter=blob:limit
tree:<depth>
Flag --filter=tree:<depth> digunakan untuk membatasi seberapa dalam ke dalam struktur direktori Git mengambil objek tree selama clone, membantu mengurangi ukuran transfer data, sangat berguna saat bekerja dengan proyek bersarang dalam seperti monorepo. Misalnya, jika Anda ingin dengan cepat memeriksa struktur monorepo besar untuk audit, onboarding, atau peninjauan, mengunduh tree yang dalam adalah pemborosan.
git clone --filter=tree:<depth> <repo-url>
git clone --filter=tree:0 https://github.com/aws/aws-cli.git

Clone dengan filter=tree
Perlu dicatat bahwa server Git tempat Anda melakukan cloning (dalam hal ini, GitHub) mungkin hanya mendukung nilai tertentu untuk kedalaman pemfilteran tree.

Filter tree mengizinkan kedalaman maksimum 0
Konfigurasi khusus clone
Git menyediakan beberapa opsi untuk menyesuaikan perilaku saat cloning:
--origin <name>: menetapkan nama remote kustom alih-alih origin--template <dir>: menggunakan direktori file template untuk penyiapan awal.git--single-branch: menghindari pengambilan branch lain--recurse-submodules: otomatis menginisialisasi dan meng-clone submodule
Opsi-opsi ini berguna saat menyiapkan lingkungan standar, bekerja dengan repositori modular, atau mengintegrasikan dengan alat deployment.
origin
Flag --origin <name> memungkinkan pengembang menyesuaikan nama remote dari mana repositori di-clone. Secara bawaan, Git menamai remote origin, tetapi flag ini memungkinkan Anda mengubahnya ke nama lain saat operasi clone.
git clone --origin <remote name> <repo-url>
# Name the remote as “upstream”
git clone --origin upstream https://github.com/aws/aws-cli.git

Ganti nama remote dari origin menjadi upstream
Pengembang mungkin perlu mengubah nama remote untuk kejelasan, karena mereka mungkin nanti perlu menambahkan remote lain (misalnya, upstream vs origin hasil fork). Mengubah nama remote pertama membantu menghindari kebingungan dan konflik.
template
Flag --template memungkinkan pengembang menentukan direktori template kustom yang akan digunakan Git saat membuat direktori .git di repositori yang baru di-clone. Direktori template memungkinkan Anda menetapkan hook, file konfigurasi, atau struktur direktori yang diterapkan secara otomatis ke repositori saat inisialisasi.
# Specify the directory from which templates will be used
git clone --template=<template-directory> <repo>
git clone --template=./git-template https://github.com/aws/aws-cli.git

Penggunaan flag --template
Saya akan membahas flag template lebih lanjut pada bagian “Penerapan direktori template”.
single-branch
Flag --single-branch digunakan untuk meng-clone hanya riwayat branch yang ditentukan, alih-alih semua branch di repositori remote. Ini dapat secara signifikan mengurangi jumlah data yang di-clone, terutama pada repositori dengan banyak branch berumur panjang atau riwayat commit yang besar.
Saat Anda ditugaskan untuk bekerja pada branch fitur atau rilis tertentu (misalnya, feature/login-ui, release/v2.0), tidak perlu meng-clone riwayat branch lain yang tidak terkait.
git clone --branch feature/login-ui --single-branch <repo-url>
# If you do not specify a branch, Git will clone only the remote's default branch, usually main or master
git clone --single-branch <repo-url>
git clone --single-branch https://github.com/aws/aws-cli.git
git clone pada umumnya melacak semua branch remote, seperti ditunjukkan pada keluaran git branch -r di bawah ini.

Semua branch remote dilacak
Sedangkan penambahan --single-branch hanya meng-clone riwayat branch yang ditentukan.

Hanya branch default yang dilacak
recurse-submodules
Git submodule adalah referensi ke repositori lain, terikat ke commit tertentu. Ini memungkinkan Anda menyimpan repositori Git lain sebagai subdirektori dari repositori Git Anda, sering digunakan untuk menyertakan kode pihak ketiga, pustaka bersama, atau komponen vendor.
Saya membuat repositori GitHub publik untuk mendemonstrasikan konsep ini.

Mendemonstrasikan submodule
Saat kita meng-clone proyek yang memiliki submodule, secara bawaan kita mendapatkan direktori yang memuat submodule, tetapi bukan file di dalamnya.

Folder submodule kosong
Alih-alih menjalankan git submodule init untuk menginisialisasi file konfigurasi lokal Anda, dan git submodule update untuk mengambil semua data dari proyek tersebut, kita dapat menggunakan flag --recurse-submodules pada perintah git clone untuk secara otomatis menginisialisasi dan meng-clone semua submodule yang didefinisikan di file .gitmodules repositori.
git clone --recurse-submodules <repo-url>

Clone file di dalam direktori submodule
Penerapan direktori template
Git memungkinkan penggunaan direktori template untuk mendefinisikan hook, konfigurasi, dan file default lainnya saat cloning atau inisialisasi repositori:
Struktur direktori template dapat serupa seperti di bawah ini, dengan hooks/pre-commit berisi skrip shell hook untuk memblokir commit tanpa ID JIRA, dan hooks/commit-msg berisi template untuk pesan commit.
/home/devops/git-template/
├── config
├── description
├── hooks/
│ ├── pre-commit
│ └── commit-msg
├── info/
│ └── exclude
Setelah Anda mendefinisikan file yang diperlukan di direktori template, Anda dapat menggunakannya untuk operasi git clone Anda.
git clone --template=</path/to/template> <repo-url>
git clone --template=/home/devops/git-template https://github.com/aws/aws-cli.git
Ini ideal untuk:
- Menerapkan kebijakan repositori melalui hook (misalnya, pre-commit)
- Menetapkan file konfigurasi untuk CI/CD atau tooling
- Mem-bootstrapping proyek dengan struktur umum
Direktori template menyederhanakan alur kerja tim dan memastikan konsistensi di seluruh repositori yang di-clone.
Cloning pada Sistem Operasi yang Berbeda
Meskipun perintah git clone bekerja sama pada intinya di semua platform, pengalaman pengguna dapat sedikit berbeda tergantung pada sistem operasi.
Pertimbangan spesifik lingkungan—seperti alat terminal, format path file, dan penanganan izin—dapat memengaruhi cara pengembang berinteraksi dengan Git. Pada bagian ini, saya akan mengulas proses cloning di Windows, Linux/Ubuntu, dan macOS untuk membantu Anda menavigasi perbedaannya.
Windows
Di Windows, pengembang biasanya menggunakan Git Bash, PowerShell, atau Command Prompt untuk mengeksekusi perintah Git. Kita dapat memasang Git dari halaman unduhan, yang disertai Git Bash, shell mirip Unix yang disesuaikan untuk penggunaan Git di Windows.

git clone di Git Bash

git clone di PowerShell
Beberapa hal yang perlu diperhatikan:
- Path file di Git Bash menggunakan format gaya Unix (
/c/Users/username/), sedangkan PowerShell dan Command Prompt menggunakan format Windows (C:\Users\username\). - Jika menggunakan PowerShell, pastikan Git ditambahkan ke PATH sistem Anda.
Linux/Ubuntu
Distro Linux seperti Ubuntu menyediakan pengalaman Git yang mulus melalui terminal natifnya. Untuk contoh berikut, saya menyalakan instance Ubuntu EC2 di AWS dan terhubung melalui SSH.

SSH ke instance Ubuntu EC2
Git telah terpasang secara bawaan. Namun, jika di sistem Anda belum ada, cukup jalankan perintah sudo apt install git.

Instal git di Ubuntu
Arahkan ke direktori yang diinginkan dan jalankan perintah git clone.

git clone di Ubuntu
Beberapa hal yang perlu diperhatikan:
- Pastikan kunci SSH dikonfigurasi dengan benar untuk repositori privat (
~/.ssh/id_rsa). - Izin file dan kepemilikan direktori dapat memengaruhi operasi repositori, terutama saat cloning ke path level sistem.
Mac
macOS menawarkan lingkungan berbasis Unix yang sangat mirip dengan Linux, sehingga operasi Git terasa intuitif. Git sering kali sudah terpasang. Jika belum, memasang Xcode Command Line Tools (xcode-select --install) juga akan memasang Git.
Buka Terminal, lalu jalankan perintah git clone.
git clone di Mac
Beberapa hal yang perlu diperhatikan:
- Seperti pada Linux, manajemen kunci SSH penting untuk repositori privat.
- Pengguna macOS sering menggunakan klien GUI seperti GitHub Desktop atau Sourcetree; pastikan pengaturan Git di bawahnya dikonfigurasi dengan benar.
Skenario Implementasi Praktis
Walaupun git clone sering digunakan untuk sekadar mendapatkan salinan repositori, kegunaannya jauh melampaui itu dalam alur kerja rekayasa yang nyata.
Pada bagian ini, saya meninjau bagaimana strategi cloning dapat diterapkan dalam skenario praktis, yang masing-masing membutuhkan pendekatan khusus untuk memaksimalkan efisiensi dan konsistensi.
Alur kerja pengembangan di perusahaan
Di organisasi besar, cloning repositori yang efisien penting untuk memperlancar onboarding pengembang dan standarisasi penyiapan proyek. Strategi berikut dapat diadopsi:
- Pertama, shallow clone (
--depth=1). Sering digunakan untuk mengurangi waktu penyiapan bagi pengembang baru yang tidak memerlukan seluruh riwayat commit. - Kedua, repositori template. Jangan bingung dengan direktori template. Repositori template berisi struktur folder, hook, dan submodule yang telah ditetapkan untuk di-clone demi inisiasi proyek yang cepat. Di GitHub, Anda dapat mengaktifkan repositori sebagai repositori template melalui halaman pengaturan.

Pengaturan repositori template
Setelah mengaktifkannya, Anda akan menemukan tombol "Use this template" di halaman beranda repositori Anda.

Gunakan repositori sebagai template
- Terakhir, memiliki mirror internal dari repositori eksternal mengurangi ketergantungan pada jaringan publik dan mempercepat cloning di lingkungan yang aman.
Prosedur migrasi repositori
Organisasi dapat memigrasikan repositori antar platform (misalnya, GitHub ke GitLab) karena berbagai alasan, termasuk keamanan, kepatuhan, atau pertimbangan finansial. Migrasi memerlukan clone mirror untuk memastikan salinan penuh dan lengkap, termasuk semua branch, tag, dan riwayat commit.
Proses tipikal dapat sebagai berikut:
# --mirror flag clones all refs and configuration.
git clone --mirror https://source-url.com/your-repo.git
cd your-repo.git
git push --mirror https://target-url.com/your-new-repo.git
Metode ini mempertahankan metadata Git lebih baik daripada clone standar yang diikuti push. Setelah migrasi, perbarui URL remote dan verifikasi izin akses.
Optimasi pipeline CI/CD
Dalam lingkungan otomatis, mengoptimalkan operasi clone menghemat waktu dan mengurangi penggunaan sumber daya, terutama pada deployment berfrekuensi tinggi. Kita dapat mengikuti praktik terbaik berikut untuk memastikan alur pipeline yang efisien:
- Pertama, gunakan shallow clone (
--depth=1) untuk mempercepat waktu mulai job.
git clone --depth 1 <repository-url>
- Kedua, clone hanya branch yang diperlukan untuk menghindari ref yang tidak perlu.
git clone --branch <branch-name> --single-branch <repo-url>
- Terakhir, jika beberapa tahap dalam pipeline CI/CD Anda memerlukan akses ke konten repositori yang sama, pertimbangkan menerapkan mekanisme caching untuk menghindari operasi
git cloneberulang. Alih-alih meng-clone repositori di setiap tahap, cache working directory setelah checkout awal dan teruskan sebagai artefak atau volume bersama ke tahap berikutnya.
Pendekatan ini secara signifikan mengurangi operasi berulang, mempercepat eksekusi pipeline, dan menghemat sumber daya komputasi serta jaringan.
Pemecahan Masalah dan Diagnostik
Walaupun git clone merupakan perintah yang banyak digunakan dan mudah, sesekali pengembang dapat menemui masalah selama proses cloning, terutama di lingkungan dengan kontrol autentikasi ketat, konfigurasi repositori khusus, atau akses jaringan terbatas.
Pada bagian ini, saya akan membahas masalah cloning umum dan cara menyelesaikannya secara efisien.
Penyelesaian kegagalan autentikasi
Kegagalan autentikasi biasanya terjadi saat mengakses repositori privat atau menggunakan kredensial yang kedaluwarsa. Bergantung pada protokolnya, HTTPS atau SSH, pesan kesalahan dan perbaikannya berbeda. Untuk lingkungan dengan MFA, selalu utamakan SSH atau HTTPS dengan PAT.
Untuk HTTPS, kesalahan umum adalah kegagalan autentikasi. Ini bisa disebabkan penggunaan personal access token yang kedaluwarsa. Jika MFA diaktifkan, kemungkinan lain adalah personal access token tidak digunakan sebagai kata sandi.
Kegagalan autentikasi HTTPS
Untuk SSH, kesalahan umum adalah “Permission denied (publickey)”. Ini dapat terjadi karena kunci publik belum ditambahkan ke akun penyedia Git atau kunci privat yang disimpan di perangkat lokal Anda tidak berada di direktori yang benar.
Kegagalan autentikasi SSH
Anda dapat memvalidasi konektivitas dengan:
ssh -T [email protected]
Pengambilan objek pada partial clone
Dalam kasus jarang, saat menggunakan partial clone (flag --filter atau --depth), Anda mungkin menemui objek yang hilang (misalnya, “error: object <sha> is missing”) jika Git mencoba mengakses bagian repositori yang tidak diambil awalnya.
Saya belum pernah menemui situasi ini. Namun demikian, Anda mungkin menjumpai kesalahan saat mengakses commit historis, branch, atau tag. Jika ini terjadi di pipeline, alat build atau skrip mungkin gagal. Anda dapat secara eksplisit mengambil data yang hilang menggunakan:
# Have Git refetch all objects from the remote, even if it thinks it already has them.
# For dealing with a broken or corrupted partial clone
git fetch --filter=blob:none --refetch
# Convert a shallow clone into a full clone. Retrieves the rest of the commit history that was omitted during the shallow clone.
git fetch --unshallow
# Obtain a deeper history of the branch
git fetch origin <branch> --depth=50
# Fetches 30 more commits from the current branch’s history. Repeat as needed.
git fetch --deepen=30

Minta Git mengambil ulang semua objek dari remote
Pesan kesalahan git clone umum dan perbaikannya
Selain masalah di atas yang mungkin Anda hadapi saat git clone, tabel berikut membahas kesalahan umum lainnya.
|
Pesan Kesalahan |
Penyebab |
Perbaikan |
|
Repository not found. |
URL salah atau tidak punya akses |
Periksa URL repositori dan pastikan Anda memiliki izin baca. |
|
fatal: unable to access '...': SSL certificate problem |
Masalah kepercayaan sertifikat |
Gunakan CA yang valid atau nonaktifkan verifikasi SSL (tidak direkomendasikan): git config --global http.sslVerify false |
|
RPC failed; curl 56 |
Ketidakstabilan jaringan atau repo besar |
Tingkatkan ukuran buffer: git config --global http.postBuffer 524288000 |
Penutup
Perintah git clone mungkin tampak sederhana sekilas, dan bagi banyak orang, penggunaan dasarnya sudah cukup. Namun, seperti yang ditunjukkan artikel ini, ini adalah alat fundamental dengan aplikasi yang luas.
Kita telah membahas cara kerja git clone, menelusuri jenis URL dan protokol, menjabarkan konfigurasi tingkat lanjut dan perilaku spesifik OS, serta meninjau skenario dunia nyata seperti CI/CD, alur kerja enterprise, dan teknik pemecahan masalah umum.
Menyesuaikan git clone dengan lingkungan Anda—baik untuk shallow clone di pipeline, migrasi repositori, maupun kolaborasi skala besar—dapat secara signifikan meningkatkan kinerja dan efisiensi tim. Seiring lingkungan pengembangan modern menjadi semakin kompleks dan terdistribusi, menguasai konfigurasi ini memastikan Anda tidak hanya menggunakan Git, tetapi menggunakannya secara efektif.
Ke depan, mekanisme cloning Git masih bisa ditingkatkan, seperti partial clone yang lebih cerdas, dukungan yang lebih baik untuk monorepo besar, serta penanganan submodule dan filter yang lebih intuitif. Seiring Git berevolusi, tetap mengikuti peningkatan ini akan memberdayakan developer untuk bekerja lebih cepat dan efisien di sistem atau skala apa pun.
Untuk mempelajari lebih lanjut tentang Git, saya menyarankan mengikuti kursus Introduction to Git. Jika Anda ingin meningkatkan keterampilan ke level berikutnya, maka kursus Advanced Git cocok untuk Anda!

Seorang Engineer Infrastruktur Cloud dan DevOps berpengalaman dengan keahlian dalam Terraform, pipeline GitLab CI/CD, dan beragam layanan AWS, Kenny mahir merancang solusi cloud yang skalabel, aman, dan hemat biaya. Ia unggul dalam membangun infrastruktur yang dapat digunakan kembali, mengotomatiskan alur kerja dengan Python dan Bash, serta menanamkan praktik keamanan terbaik ke dalam pipeline CI/CD. Dengan pengalaman langsung yang luas di Kubernetes dan berbagai alat observabilitas, Kenny andal dalam mengelola dan mengorkestrasi microservices sekaligus memastikan observabilitas yang kuat serta pemantauan kinerja. Diakui atas kepemimpinan, mentoring, dan komitmennya terhadap inovasi, Kenny secara konsisten menghadirkan solusi andal dan skalabel untuk aplikasi cloud-native modern. Ia tetap berkomitmen untuk berada di garis depan tren industri dan teknologi yang muncul, terus memperluas dan memperdalam keahliannya.

Git adalah sistem kontrol versi terdistribusi yang andal untuk melacak riwayat perubahan file, memungkinkan kolaborasi yang efisien di antara tim pengembang.
Sebagai seseorang yang bekerja dengan kode dan skrip, salah satu perintah pertama yang akan Anda temui di Git adalah
git clone. Perintah ini memungkinkan Anda membuat salinan lokal dari sebuah repositori yang telah dikerjakan rekan Anda, menjadi landasan untuk berkontribusi pada proyek bersama atau mengelola basis kode secara luring.Jika Anda ingin mempelajari lebih lanjut tentang Git, saya merekomendasikan kursus Introduction to Git ini.
Dalam arsitektur terdistribusi Git, setiap pengembang memiliki salinan lengkap repositori, termasuk riwayat commit dan branch. Hal ini dimungkinkan melalui perintah
git clone. Perintah ini memastikan bahwa Anda tidak hanya mengunduh kondisi terkini suatu proyek, tetapi juga mewarisi seluruh riwayat versinya, yang mungkin penting untuk memahami bagaimana basis kode mencapai kondisinya saat ini.Dalam tutorial ini, saya akan membahas apa yang dilakukan
git clone, cara menggunakannya dalam berbagai skenario, dan apa yang terjadi di balik layar saat Anda menjalankan perintah tersebut. Baik Anda pemula yang baru mulai dengan Git maupun ingin memperdalam pemahaman tentang manajemen repositori, panduan ini akan memberi Anda pengetahuan praktis dan kepercayaan diri untuk menggunakangit clonesecara efektif.Apa itu git clone?
Perintah
git clonemenyalin atau menggandakan sebuah repositori ke direktori baru di mesin lokal Anda. Meskipun dapat mengkloning repositori lokal maupun jarak jauh, perintah ini paling sering digunakan untuk mengkloning repositori jarak jauh.git clonemenyalin semua file, branch, riwayat commit, dan konfigurasi dari sumber (seperti GitHub, GitLab, atau Bitbucket) ke direktori baru di tujuan, yang bisa berupa mesin lokal Anda atau pipeline CI/CD.Pada dasarnya,
git cloneadalah jalan pintas yang menyiapkan semua yang Anda butuhkan untuk mulai mengerjakan proyek yang sudah ada. Misalnya, untuk memiliki salinan repositori “aws-cli” dari GitHub (repositori jarak jauh) ke mesin lokal Anda, Anda dapat menjalankan perintahgit cloneseperti yang ditunjukkan pada gambar berikut:Keluaran penggunaan dasar git clone
Dibandingkan dengan perintah Git lainnya,
git cloneunik karena biasanya merupakan titik kontak pertama Anda dengan repositori jarak jauh dan umumnya dilakukan satu kali saja. Misalnya:git initmembuat repositori Git baru secara lokal dari awal, yang juga merupakan operasi satu kali.git fetch,git pull, dangit pushdigunakan setelah repositori sudah disiapkan.Sebaliknya,
git clonemenginisialisasi seluruh lingkungan Git Anda untuk proyek yang sudah ada dalam satu langkah — tanpa perlu pengaturan tambahan. Jika Anda bergabung dalam sebuah proyek atau berkontribusi pada proyek open source,git cloneadalah titik awal Anda.Mekanisme Dasar Kloning Repositori
Mengkloning repositori Git bukan sekadar mengunduh file proyek. Bagian ini mengulas apa yang terjadi selama proses kloning dan bagaimana model terdistribusi Git memungkinkan kolaborasi mulus melalui interaksi peer-to-peer, berbeda dengan sistem terpusat tradisional.
Memahami proses kloning
Mari pahami apa yang terjadi di latar belakang saat perintah
git clonedijalankan..git. Direktori ini menyimpan semua metadata, konfigurasi, dan riwayat versi yang diperlukan untuk melacak dan mengelola perubahan.originuntuk repositori jarak jauh yang kita kloning, sehingga kita dapat melakukan fetch dan push perubahan dengan mudah.Lihat variabel konfigurasi
mainataumasterdan inilah branch tempat Anda mulai bekerja setelah kloning. Namun, untuk repositori “aws-cli”, branch bawaannya adalahdevelop.Desain dan fungsi Git berarti setelah kloning selesai, repositori lokal Anda adalah salinan yang sepenuhnya independen dengan kemampuan yang sama seperti remote. Ia dapat melakukan commit, membuat branch, dan bahkan bertindak sebagai remote bagi orang lain.
Model ini berbeda secara signifikan dari Centralized Version Control Systems (CVCS) seperti Subversion (SVN), di mana server bertindak sebagai satu-satunya sumber kebenaran. Di Git, setiap clone adalah peer, bukan sekadar klien. Semua repositori setara dalam hal fungsionalitas, dan perubahan dapat dibagikan ke segala arah.
Repo SVN vs repo Git. Sumber: Atlassian
Model kolaborasi antarrepositori
Setiap kali kita mengkloning repositori Git, kita tidak sekadar membuat salinan; kita membuat repositori Git baru yang mandiri. Clone kita memiliki riwayat commit dan struktur lengkap dari repositori asal.
Lihat seluruh riwayat commit dari repositori yang dikloning
Ini memungkinkan kita bekerja luring, melakukan commit, dan membuat branch secara mandiri. Repositori lokal kita juga dapat menjadi basis untuk fitur baru atau eksperimen.
Tambahkan commit ke repositori yang dikloning
Proses kloning membangun hubungan pelacakan, terutama dengan repositori jarak jauh yang diberi label
origin. Koneksi ini memungkinkan hal-hal berikut:git fetch origingit pullgit push origin <branch>Walaupun setiap orang memiliki salinan repositorinya sendiri, Git memastikan koordinasi melalui remote bersama dan pelacakan yang jelas tentang branch mana yang bersesuaian di antara repositori. Inilah alasan Git digunakan di semua organisasi untuk mengelola basis kode mereka.
Intinya, kloning adalah pintu masuk ke model kolaborasi terdistribusi Git, di mana setiap kontributor menjadi peserta setara dalam siklus pengembangan.