Perintah git clone menyalin repository lain secara utuh dan menyiapkan seluruh koneksi ke sumbernya, sehingga menjadi pintu masuk paling umum ke sebuah proyek. Topik ini membahas apa yang diatur clone secara otomatis, perbandingan URL HTTPS dan SSH beserta autentikasinya, dan peran fork ketika hak tulis tidak dimiliki. Ketiganya menentukan cara seseorang mulai berkontribusi pada proyek yang belum pernah disentuh.
Apa yang diatur clone secara otomatis#
Clone menyalin seluruh riwayat, membuat remote origin yang menunjuk sumbernya, membuat branch pelacak untuk setiap branch remote, dan mengatur branch lokal agar mengikuti branch utamanya. Siapkan repository pusat dengan satu commit, lalu salin.
# tanggal commit ditetapkan agar keluaran contoh dapat direproduksi secara persis
export GIT_AUTHOR_DATE="2026-11-01T09:00:00+07:00"
export GIT_COMMITTER_DATE="2026-11-01T09:00:00+07:00"rm -rf /tmp/lab-pusat.git /tmp/lab-asal /tmp/lab-salinan
git init --bare /tmp/lab-pusat.git
git init -b main /tmp/lab-asal
cd /tmp/lab-asal
git config user.name "Budi"
git config user.email "[email protected]"
printf "Panduan proyek.\n" > panduan.md
git add panduan.md
git commit -m "Panduan proyek"
git remote add origin /tmp/lab-pusat.git
git push -q -u origin main
cd /tmp
git clone lab-pusat.git lab-salinan
git -C lab-salinan remote -v
git -C lab-salinan branch -rhint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
Initialized empty Git repository in /tmp/lab-pusat.git/
Initialized empty Git repository in /tmp/lab-asal/.git/
[main (root-commit) f4ac75f] Panduan proyek
1 file changed, 1 insertion(+)
create mode 100644 panduan.md
Cloning into 'lab-salinan'...
done.
warning: remote HEAD refers to nonexistent ref, unable to checkout
origin /tmp/lab-pusat.git (fetch)
origin /tmp/lab-pusat.git (push)
origin/mainDua keluaran terakhir memperlihatkan penguatan otomatis tersebut: remote origin sudah ada tanpa pernah dideklarasikan, dan branch pelacak origin/main sudah tersedia. Perilaku bawaan lain yang jarang disadari adalah penamaan folder, yaitu nama repository sumber apabila nama tujuan tidak diberikan, sehingga git clone https://.../proyek.git menghasilkan folder proyek.
URL HTTPS dan SSH#
Bentuk URL menentukan cara Git mengotentikasi aksesnya. URL HTTPS dipakai di hampir semua jaringan dan mengandalkan kredensial pengguna pada saat menulis, sedangkan membaca repository publik tidak menuntut kredensial apa pun. URL SSH mengandalkan sepasang kunci kriptografi yang didaftarkan pada layanan hosting, sehingga setelah terpasang, pengiriman tidak lagi menanyakan kata sandi.
# tidak-dijalankan
# kedua bentuk memerlukan akses jaringan dan akun layanan hosting
git clone https://github.com/nama-pengguna/proyek.git
git clone [email protected]:nama-pengguna/proyek.gitKredensial HTTPS yang diketik berulang-ulang menjadi beban yang nyata, dan Git menyediakan penyimpanan kredensial untuk itu, mulai dari penyimpanan pada memori jangka pendek melalui git config credential.helper cache sampai penyimpanan permanen pada pengelola kredensial sistem operasi. Pada mesin dengan kunci SSH yang sudah didaftarkan, pilihan SSH menghilangkan persoalan tersebut dari akarnya, sehingga menjadi pilihan umum bagi kontributor yang rajin.
Fork ketika hak tulis tidak dimiliki#
Fork adalah salinan repository pada sisi layanan hosting, dibuat dari antarmuka platform dan bukan dari perintah Git lokal. Fungsinya menyelesaikan satu masalah: banyak proyek menutup hak tulisnya, sementara alur kontribusi tetap memerlukan tempat mendorong commit. Dengan fork, kontributor menyalin repository ke akunnya sendiri, meng-clone fork itu, mengerjakan branch fiturnya, lalu membuka pull request dari fork menuju repository asal.
Fork membawa satu kewajiban tambahan, yaitu menjaga fork tetap segar terhadap repository asal yang disebut upstream. Caranya adalah menambahkan remote kedua pada salinan lokal.
# tidak-dijalankan
# URL upstream merujuk repository asal pada layanan hosting
git remote add upstream https://github.com/proyek-asal/proyek.git
git fetch upstreamDengan dua remote itu, origin menunjuk fork yang berhak ditulis, sedangkan upstream menunjuk sumber yang berhak dibaca. Sinkronisasi berkala berupa fetch upstream lalu menggabungkan atau me-rebase branch utamanya, dan seluruh mekanikanya adalah perintah yang sudah dan akan dipakai sepanjang modul ini.
Menyalin dalam keadaan khusus#
Beberapa keadaan memerlukan bentuk clone yang sedikit berbeda, dan semuanya memakai opsi pada perintah yang sama. Clone pada folder kosong yang sudah ada, misalnya hasil persiapan proyek di layanan penyewaan mesin, berjalan dengan menyebut folder tujuan tanpa membuat nama baru. Clone ke arah sebaliknya, yaitu membuat repository tanpa working directory untuk dijadikan pusat, memakai opsi --bare, dan bentuk inilah yang dipakai pada seluruh lab modul ini untuk membangun origin lokal.
Bentuk khusus yang paling sering dipakai pada otomatisasi adalah clone dangkal melalui opsi --depth 1, yang hanya mengunduh commit terakhir beserta pohonnya dan mengabaikan riwayat yang lebih tua. Hasilnya cukup untuk membangun perangkat lunak tetapi tidak memadai untuk menelusuri riwayat, dan beberapa operasi seperti merge antar commit lama menjadi tidak tersedia. Clone penuh tetap menjadi pilihan untuk pekerjaan pengembangan, sedangkan clone dangkal menjadi pilihan mesin yang hanya perlu membangun.
Memilih pintu masuk yang tepat#
Tiga pintu menuju repository memiliki keadaan yang berbeda, dan memilih yang tepat menyelamatkan langkah-langkah berikutnya. git init dipakai ketika kode sudah ada di disk dan belum memiliki riwayat, sehingga yang dibangun adalah riwayat pertamanya. git clone dipakai ketika riwayat sudah ada di tempat lain dan akses menulis tersedia, misalnya repository tim sendiri. Fork lalu clone dipakai ketika riwayat sudah ada tetapi hak menulisnya tertutup, sehingga salinan pribadi di layanan hosting menjadi perantara kontribusi.
Keputusan ini biasanya berlaku sekali di awal proyek atau awal kontribusi, tetapi keputusan yang keliru menghantui langkah berikutnya, misalnya mengerjakan repository tanpa remote dan baru menyadari bahwa riwayatnya tidak pernah terkirim ke mana pun. Pemeriksaan yang murah sebelum memulai adalah git remote -v pada salinan yang sudah ada, karena keberadaan remote menyatakan pintu mana yang sudah dibuka.
Ringkasan#
- Clone menyalin seluruh riwayat dan mengatur remote
origin, branch pelacak, serta upstream branch secara otomatis. - URL HTTPS mengandalkan kredensial yang dapat disimpan pada credential helper, sedangkan URL SSH mengandalkan pasangan kunci yang didaftarkan sekali.
- Fork adalah salinan di sisi hosting untuk kontributor tanpa hak tulis, dan pola remote keduanya adalah
originuntuk fork sertaupstreamuntuk sumber. - Clone tanpa nama tujuan memakai nama repository sumber sebagai nama foldernya.
Referensi#
- git-clone — Git Documentation — rujukan perilaku clone dan bentuk URL yang didukung.
- About Forks — GitHub Docs — penjelasan resmi GitHub tentang peran fork dalam kontribusi.