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
:
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:
git log --onelineOutput yang Dihasilkan:
c760761 Tambah daftar bacaan awal
d4dde5d Tambah README katalogMenjalankan git clone #
Dari folder induk yang berisi sumber, kita salin repository ke folder baru:
cd ..
git clone sumber salinanOutput yang Dihasilkan:
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:
cd salinan
git log --onelineOutput yang Dihasilkan:
c760761 Tambah daftar bacaan awal
d4dde5d Tambah README katalogRiwayat pada salinan identik dengan riwayat sumber — commit yang sama, urutan yang sama. Kita bisa mencocokkan jumlahnya secara lebih formal:
git rev-list --count HEADOutput yang Dihasilkan:
2Perintah 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:
git remote -vOutput yang Dihasilkan:
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:
git branch -vvOutput yang Dihasilkan:
* main c760761 [origin/main] Tambah daftar bacaan awalTanda * 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.
git clone sumber katalog-sayaOutput yang Dihasilkan:
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://:
git clone --depth 1 file:///home/z/my-project/tutorial-extracted/work/sandbox/dasar-repository/sumber salinan-dangkalOutput yang Dihasilkan:
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:
https://github.com/budi/katalog-buku.gitFormat SSH memakai bentuk user@host:proyek tanpa skema https:
[email protected]:budi/katalog-buku.gitPerbedaan 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
.