Alamat remote tidak selamanya awet. Tim berpindah dari server lama ke mesin baru, proyek pindah dari satu layanan hosting ke layanan lain, atau kita sekadar ingin beralih dari HTTPS ke SSH agar tidak lagi mengetik token setiap kali push. Kabar baiknya: seluruh riwayat, cabang, dan pengaturan upstream kita tidak perlu dibangun ulang — cukup satu entri buku alamat yang diganti isinya lewat git remote set-url. Chapter ini mempraktikkan pergantian alamat dalam tiga skenario: pindah server, ganti protokol HTTPS ke SSH, dan menempel URL push cadangan.

Membaca Alamat yang Sedang Terpasang #

Lab kita memakai clone Budi dari proyek-utama.git, persis pola chapter Konsep Remote . Titik awal setiap pergantian alamat adalah membaca alamat yang sedang terpasang — flag -v dan subcommand get-url sama-sama bisa dipakai:

bash
git remote -v

Output yang Dihasilkan:

text
origin	/home/z/my-project/tutorial-extracted/work/sandbox/remote-repository/part-a/latihan-url/proyek-utama.git (fetch)
origin	/home/z/my-project/tutorial-extracted/work/sandbox/remote-repository/part-a/latihan-url/proyek-utama.git (push)
bash
git remote get-url origin

Output yang Dihasilkan:

text
/home/z/my-project/tutorial-extracted/work/sandbox/remote-repository/part-a/latihan-url/proyek-utama.git

Kedua keluaran memuat alamat yang sama; bedanya, get-url menampilkan alamat mentah satu baris — bentuk yang enak dipakai di skrip — tanpa label peran fetch/push. Karena clone menyimpan jalur absolut, alamat di atas tampak panjang; jalur pada keluaran menyesuaikan lokasi direktori masing-masing.

Pindah Server dengan set-url #

Skenario pertama: server tim berpindah mesin. Administrator sudah menyiapkan gudang-baru.git yang masih kosong, dan clone kita cukup diarahkan ulang — perintahnya git remote set-url <nama> <alamat-baru>:

bash
git remote set-url origin ../gudang-baru.git
git remote -v

Output yang Dihasilkan:

text
origin	../gudang-baru.git (fetch)
origin	../gudang-baru.git (push)

Kedua baris origin langsung menunjuk alamat baru; tidak ada keluaran dari set-url itu sendiri sehingga verifikasi -v menjadi kebiasaan yang sebaiknya kita bawa setiap kali mengganti alamat. Perhatikan juga bahwa perintah ini tidak menyentuh jaringan sama sekali — pergantian hanya menyentuh baris remote.origin.url di berkas konfigurasi, dan koneksi baru benar-benar terjadi saat git fetch atau git push berikutnya dijalankan.

Beralih antara HTTPS dan SSH #

Skenario kedua adalah dua format URL yang paling umum pada layanan hosting seperti GitHub. Format HTTPS menyertakan protokol dan akhiran .git:

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

Format SSH memakai pola user@host:proyek — tanpa skema https, dengan titik dua sebagai pemisah:

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

Perbedaan praktisnya ada pada autentikasi: HTTPS meminta nama pengguna dan personal access token, sedangkan SSH memakai kunci kriptografi yang dipasang lebih dulu di komputer dan didaftarkan ke layanan — pembahasan mendalam tentang kedua jalur ini tersedia di chapter SSH vs HTTPS . Untuk beralih, tetap satu perintah yang sama:

bash
git remote set-url origin https://github.com/budi/katalog-buku.git
git remote -v

Output yang Dihasilkan:

text
origin	https://github.com/budi/katalog-buku.git (fetch)
origin	https://github.com/budi/katalog-buku.git (push)
bash
git remote get-url origin

Output yang Dihasilkan:

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

Pergantian ke bentuk SSH pun identik — ganti alamatnya, lalu baca kembali:

bash
git remote set-url origin [email protected]:budi/katalog-buku.git
git remote get-url origin

Output yang Dihasilkan:

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

Output yang Dihasilkan:

text
origin	[email protected]:budi/katalog-buku.git (fetch)
origin	[email protected]:budi/katalog-buku.git (push)

URL Push Cadangan (Sekilas) #

Ada satu varian khusus yang jarang dipakai namun patut dikenal: git remote set-url --add --push <nama> <url> mendaftarkan alamat khusus untuk arah push. Begitu satu URL push terdaftar, push tidak lagi memakai alamat fetch:

bash
git remote set-url --add --push origin ../pusat-cadangan.git
git remote -v

Output yang Dihasilkan:

text
origin	../gudang-baru.git (fetch)
origin	../pusat-cadangan.git (push)

Alamat ../pusat-cadangan.git kini menjadi tujuan push, sementara ../gudang-baru.git tetap menjadi sumber fetch. Menambahkan satu URL push lagi membuat setiap git push mengirim ke dua tujuan sekaligus — pola yang dipakai tim yang ingin mirror otomatis:

bash
git remote set-url --add --push origin ../gudang-baru.git
git remote -v

Output yang Dihasilkan:

text
origin	../gudang-baru.git (fetch)
origin	../pusat-cadangan.git (push)
origin	../gudang-baru.git (push)

Daftar URL push dirapikan kembali dengan --delete --push; menghapus satu dari dua alamat menyisakan satu:

bash
git remote set-url --delete --push origin ../pusat-cadangan.git
git remote -v

Output yang Dihasilkan:

text
origin	../gudang-baru.git (fetch)
origin	../gudang-baru.git (push)

Dan bila satu-satunya URL push pun dihapus, perilaku semula kembali: push memakai alamat fetch sebagaimana tampilan awal kita tadi:

bash
git remote set-url --delete --push origin ../gudang-baru.git
git remote -v

Output yang Dihasilkan:

text
origin	../gudang-baru.git (fetch)
origin	../gudang-baru.git (push)

Seluruh bentuk set-url ini terdokumentasi di dokumentasi git remote . Buku alamat kini mampu menampung segala pergantian alamat — tinggal satu pertanyaan besar yang belum terjawab: setelah terhubung, bagaimana persisnya perubahan berpindah dari remote ke salinan kita tanpa menyentuh branch lokal? Itu pekerjaan git fetch, chapter inti berikutnya.