Sejauh ini repo-mu cuma ada di laptopmu sendiri. Supaya bisa dipakai bareng tim, repo itu juga disimpan di server seperti GitHub, GitLab, atau Bitbucket. Salinan di server itu disebut remote. Mirip buku resep keluarga yang aslinya disimpan di rumah nenek. Tiap orang memfotokopi seluruh buku, lengkap dengan catatan revisinya, lalu menyimpannya di rumah masing-masing (itu git clone). Alamat rumah nenek kamu catat dengan nama panggilan origin. Kamu boleh menulis resep baru di salinanmu sendiri, tapi buku di rumah nenek gak berubah sampai kamu mengantarnya ke sana.
🧪 Tebakan cepat: kamu clone sebuah repo dari GitHub, lalu commit satu kali di laptop. Repo di GitHub ikut berubah gak? Tebak dulu, jawabannya ada di bagian "main dan origin/main".
Clone: menyalin repo dari server
Di GitHub ada repo toko kue dengan 3 commit. Salin ke laptop:
$ git clone https://github.com/budi/toko-kue.git
Cloning into 'toko-kue'...
remote: Enumerating objects: 9, done.
Receiving objects: 100% (9/9), done.
$ cd toko-kue
$ git log --oneline
c3d4e5f (HEAD -> main, origin/main, origin/HEAD) add harga
b2c3d4e add menu
a1b2c3d initial
Satu perintah git clone mengerjakan empat hal:
- membuat folder baru, namanya diambil dari URL:
toko-kue, - mengunduh semua file dan seluruh riwayat commit-nya, bukan cuma versi terakhir,
- mencatat alamat repo asalnya sebagai remote bernama
origin, - membuat branch
mainlokal yang mulai dari commit yang sama denganmaindi GitHub.
Sesudah clone, masuk dulu ke foldernya dengan cd toko-kue. Perintah Git cuma jalan di dalam folder repo.
Mau nama folder lain? Tulis namanya sesudah URL:
$ git clone https://github.com/budi/toko-kue.git proyek
Cloning into 'proyek'...
Melihat remote: git remote -v
$ git remote
origin
$ git remote -v
origin https://github.com/budi/toko-kue.git (fetch)
origin https://github.com/budi/toko-kue.git (push)
git remotemenampilkan nama-nama remote. Hasil clone selalu punya satu:origin, nama bawaan untuk repo asal.-v(kependekan dari--verbose) ikut menampilkan URL-nya. Ada dua baris karena ada dua arah: fetch untuk mengambil dari remote, push untuk mengirim ke remote. Keduanya dibahas di materi Git Push & Pull.
main dan origin/main
$ git branch -a
* main
remotes/origin/HEAD -> origin/main
remotes/origin/main
origin/main disebut remote-tracking branch: catatan Git tentang posisi main di GitHub waktu terakhir kali laptopmu berkomunikasi dengan GitHub. Kamu gak bekerja di sana. Kamu bekerja di main lokal.
Sekarang commit sekali di laptop:
$ echo "Brownies 25000" >> menu.txt
$ git add .
$ git commit -m "tambah brownies"
$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
| Sesudah | main (laptop) |
origin/main |
main di GitHub |
|---|---|---|---|
git clone |
add harga | add harga | add harga |
| commit "tambah brownies" | tambah brownies | add harga | add harga |
main maju, origin/main diam, dan repo di GitHub gak berubah sama sekali. Itu jawaban tebakannya: commit cuma ada di laptopmu sampai kamu mengirimnya dengan git push, yang dibahas di materi berikutnya.
Dari git init: git remote add
Kalau project-nya kamu mulai sendiri dengan git init, belum ada remote. Buat repo kosong di GitHub, lalu sambungkan:
$ git init
$ git add .
$ git commit -m "first commit"
$ git remote add origin https://github.com/budi/portofolio.git
$ git remote -v
origin https://github.com/budi/portofolio.git (fetch)
origin https://github.com/budi/portofolio.git (push)
git remote add <nama> <url>mencatat alamat baru dengan nama panggilan. Namanya bebas, tapi untuk repo utama, semua orang memakaiorigin.- Berhasil berarti gak ada output.
- Belum ada
origin/main, karena repo GitHub-nya masih kosong. Dia baru muncul setelah push pertama. git clonesudah memasangoriginsendiri, jadigit remote add origincuma perlu untuk repo yang dimulai darigit init.
💡 origin dan upstream
Waktu kamu fork project orang lain di GitHub (membuat salinan repo mereka di akun GitHub-mu), biasanya ada dua remote:
origin: fork milikmu, tempat kamu push.upstream: repo aslinya, tempat kamu mengambil pembaruan dari pemiliknya.
$ git remote add upstream https://github.com/pemilik/project.git
$ git remote
origin
upstream
⚠️ Jebakan yang sering ketemu
- Lupa
cdsesudah clone. Git menjawabfatal: not a git repository, karena kamu masih di luar folder repo. git remote add origindua kali. Jawabannyaerror: remote origin already exists.Mau ganti alamatnya? Pakaigit remote set-url origin <url-baru>.- Mengira commit sudah ada di GitHub. Commit cuma menggeser
maindi laptop. Cekgit status: "ahead of 'origin/main'" artinya ada commit yang belum dikirim. - Clone di dalam folder repo lain. Repo jadi bersarang dan membingungkan. Clone dari folder biasa, misalnya folder
projects.
TL;DR: Remote adalah salinan repo di server seperti GitHub. git clone <url> membuat folder, mengunduh semua file dan riwayatnya, memasang remote bernama origin, dan menyiapkan main. Tambahkan nama folder sesudah URL untuk nama lain (git clone <url> proyek). git remote -v menampilkan nama remote dan URL-nya untuk fetch dan push. origin/main adalah catatan posisi main di GitHub: commit di laptop cuma menggeser main, dan GitHub gak berubah sampai kamu push. Repo dari git init disambungkan dengan git remote add origin <url>. Repo asli yang kamu fork biasanya dinamai upstream.