Pintu kedua menuju repository adalah git clone: membuat salinan kerja dari repository yang sudah ada, baik di folder lain pada komputer yang sama maupun di server tim. Yang sering disalahpahami pemula adalah clone bukan “mengunduh berkas terbaru” — clone menyalin seluruh database riwayat, sehingga salinan yang kita terima sama lengkapnya dengan sumbernya, dan Git sekaligus menyiapkan koneksi balik bernama origin untuk pengiriman perubahan ke depan. Pada chapter ini kita buktikan ketiga klaim itu dengan repository sumber sungguhan di sandbox, lalu kenali opsi-opsi clone yang paling sering dipakai.

Menyiapkan Repositori Sumber #

Clone membutuhkan sumber yang berisi repository. Kita bangun satu repository kecil berisi dua commit — pembuatannya memakai git init dan siklus add–commit yang sudah dibahas pada chapter git init :

bash
mkdir sumber && cd sumber
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"

Dua commit kemudian dicatat: satu commit menambahkan README.md, satu commit lagi menambahkan daftar-bacaan.md (urutan perintahnya sama dengan latihan pada section Pengantar Git ). Riwayat sumbernya berbunyi:

bash
git log --oneline

Output yang Dihasilkan:

text
c760761 Tambah daftar bacaan awal
d4dde5d Tambah README katalog

Menjalankan git clone #

Dari folder induk yang berisi sumber, kita salin repository ke folder baru:

bash
cd ..
git clone sumber salinan

Output yang Dihasilkan:

text
Cloning into 'salinan'...
done.

Baris pertama mengumumkan nama folder tujuan yang sedang dibuat; baris done. menandakan penyalinan selesai. Perintah ini memakai jalur lokal relatif — mekanisme yang sama persis dengan meng-clone dari server, hanya sumbernya berupa folder di komputer kita sendiri sehingga prosesnya seketika dan tidak butuh jaringan. Folder salinan kini berisi README.md, daftar-bacaan.md, dan folder .git — lengkap seperti sumbernya.

Seluruh Riwayat Ikut Tersalin #

Bukti pertama bahwa clone menyalin riwayat, bukan sekadar berkas terakhir:

bash
cd salinan
git log --oneline

Output yang Dihasilkan:

text
c760761 Tambah daftar bacaan awal
d4dde5d Tambah README katalog

Riwayat pada salinan identik dengan riwayat sumber — commit yang sama, urutan yang sama. Kita bisa mencocokkan jumlahnya secara lebih formal:

bash
git rev-list --count HEAD

Output yang Dihasilkan:

text
2

Perintah git rev-list --count HEAD menghitung commit yang bisa ditelusuri dari posisi HEAD ke belakang; hasilnya 2 — sama dengan jumlah di sumber. Inilah wujud model terdistribusi yang dibahas pada chapter Distributed Version Control : setiap salinan membawa database lengkap, sehingga git log, git diff, dan penelusuran sejarah bekerja penuh tanpa jaringan.

origin dan Tracking Otomatis #

Bukti kedua: clone bukan sekadar menyalin, tetapi juga menyiapkan hubungan balik ke sumber. Nama sumbernya tercatat pada daftar remote:

bash
git remote -v

Output yang Dihasilkan:

text
origin	/home/z/my-project/tutorial-extracted/work/sandbox/dasar-repository/sumber (fetch)
origin	/home/z/my-project/tutorial-extracted/work/sandbox/dasar-repository/sumber (push)

Dua baris tersebut memuat nama remote, alamatnya, dan perannya: fetch untuk menerima perubahan dari sumber, push untuk mengirim perubahan ke sumber. Nama origin adalah konvensi yang Git berikan otomatis kepada sumber clone — bukan kata kunci, hanya nama panggilan yang bisa diganti. Pada mesin pengujian, alamat remote berupa jalur folder lokal; saat meng-clone dari server, posisinya digantikan URL. Konsep remote secara penuh dibahas pada section Remote Repository .

Bukti ketiga: branch lokal kita langsung dikaitkan ke posisi terbaru sumber:

bash
git branch -vv

Output yang Dihasilkan:

text
* main c760761 [origin/main] Tambah daftar bacaan awal

Tanda * menandai branch aktif, main namanya, c760761 commit terakhirnya, dan [origin/main] memperlihatkan kaitan tracking: branch main lokal mengikuti posisi main pada origin. Berkat kaitan ini, kelak git status bisa melaporkan ketinggalan atau kelebihan commit kita dibanding sumber, dan git push tahu ke mana commit dikirim — topiknya dibedah pada chapter Tracking Branch .

Opsi yang Sering Dipakai #

Bentuk lengkap perintahnya adalah git clone <sumber> <folder-tujuan>. Bagian <folder-tujuan> bersifat pilihan: disebut berarti menentukan nama folder salinan, dihilangkan berarti Git memakai nama bawaan dari sumbernya.

bash
git clone sumber katalog-saya

Output yang Dihasilkan:

text
Cloning into 'katalog-saya'...
done.

Opsi penting berikutnya adalah --depth 1, yang membuat shallow clone: salinan yang hanya membawa riwayat sedalam satu commit terakhir sehingga jauh lebih ringan untuk repository besar. Karena sumber kita berupa jalur lokal, opsi ini baru berlaku saat sumber ditulis dengan protokol file://:

bash
git clone --depth 1 file:///home/z/my-project/tutorial-extracted/work/sandbox/dasar-repository/sumber salinan-dangkal

Output yang Dihasilkan:

text
Cloning into 'salinan-dangkal'...

Riwayat salinan ini hanya berisi commit terbaru: git log --oneline menampilkan satu baris c760761, dan git rev-list --count HEAD menghasilkan 1 — kontras dengan salinan lengkap yang berisi 2. Pembahasan mendalam tentang shallow clone, kegunaannya, dan batasannya ada di chapter Shallow Clone .

Sumber clone di dunia nyata paling sering berupa URL. Format HTTPS-nya menyertakan protokol dan akhiran .git:

text
https://github.com/budi/katalog-buku.git

Format SSH memakai bentuk user@host:proyek tanpa skema https:

text
[email protected]:budi/katalog-buku.git

Perbedaan praktisnya terletak pada autentikasi: HTTPS memakai nama pengguna dan token, SSH memakai kunci kriptografi yang dipasang lebih dulu di komputer. Keduanya menghasilkan clone yang identik dengan contoh lokal di atas — termasuk origin dan tracking otomatisnya. Perintah beserta seluruh opsi resminya terdokumentasi pada dokumentasi git clone .

Clone dan init kini sama-sama sudah pernah kita jalankan, dan keduanya meninggalkan jejak yang sama: folder .git di dalam folder proyek. Saatnya membuka folder itu dan memetakan apa saja isinya — peta lengkapnya ada di chapter berikutnya. Lanjut ke Struktur Repository .