Konsep remote

Konsep remote dan branch pelacak remote, serta kaitan origin dengan repository lokal.

Daftar isi

Repository lokal menjadi berguna secara tim ketika terhubung dengan repository lain, dan penghubung itu disebut remote. Topik ini membahas konsep remote sebagai penunjuk bernama, penamaan origin yang menjadi kebiasaan baku, branch pelacak remote (remote-tracking branch) yang menjadi salinan informasi dari repository lain, dan peran repository bare sebagai pusat bersama. Seluruh contoh memakai repository lokal sebagai remote sehingga dapat direproduksi tanpa layanan hosting.

Remote adalah penunjuk bernama#

Remote adalah nama untuk sebuah URL repository lain, dan tidak lebih dari itu. Nama itu dipakai sebagai singkatan pada seluruh perintah jaringan, sehingga git push origin berarti kirim ke repository yang ditunjuk nama origin. Satu repository dapat memiliki banyak remote, misalnya satu menuju repository tim dan satu lagi menuju repository pribadi, tetapi pada kebanyakan proyek cukup satu.

Nama origin adalah kebiasaan yang disetel otomatis oleh git clone dan dipakai luas oleh dokumentasi serta alat pelengkap, sehingga mempertahankannya membuat setiap bacaan dan setiap skrip tetap serasi. Repository bare, yaitu repository yang tidak memiliki working directory, menjadi bentuk yang lazim untuk remote karena tujuannya hanya menyimpan riwayat, bukan tempat mengedit berkas.

Menambahkan dan memeriksa remote#

Siapkan repository pusat berbentuk bare dan repository lokal yang terhubung dengannya.

bash
rm -rf /tmp/lab-origin.git /tmp/lab-lokal
git init --bare /tmp/lab-origin.git
git init -b main /tmp/lab-lokal
cd /tmp/lab-lokal
git config user.name "Budi"
git config user.email "[email protected]"
git remote add origin /tmp/lab-origin.git
git remote -v
text Keluaran
hint: 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-origin.git/
Initialized empty Git repository in /tmp/lab-lokal/.git/
origin	/tmp/lab-origin.git (fetch)
origin	/tmp/lab-origin.git (push)

Perintah git remote -v menampilkan setiap remote dua kali, masing-masing untuk arah mengambil (fetch) dan arah mengirim (push), karena kedua URL memang boleh berbeda pada penyiapan tertentu. Menghapus atau mengganti nama remote juga berjalan pada tingkat yang sama, yaitu penunjuk di .git/config, tanpa menyentuh isi riwayat.

bash
git remote rename origin pusat
git remote -v
git remote remove pusat
git branch -r
text Keluaran
pusat	/tmp/lab-origin.git (fetch)
pusat	/tmp/lab-origin.git (push)

Perintah git branch -r menampilkan daftar branch remote, dan keluarannya kosong karena informasi tentang repository lain baru tersedia setelah perintah jaringan dijalankan. Inilah yang dibahas pada bagian berikutnya.

Branch pelacak remote#

Branch pelacak remote, misalnya origin/main, adalah cabang bacaan dari branch main milik repository origin. Cabang ini tersimpan di .git/refs/remotes/origin/ dan bergerak hanya ketika informasi baru ditarik dari remote melalui git fetch atau git pull, bukan ketika repository lain berubah. Dengan kata lain, branch pelacak adalah potret informasi pada saat terakhir diambil, bukan tampilan langsung.

Potret itulah yang membuat git status dapat menyatakan posisi branch lokal terhadap remote, misalnya berapa commit di depan atau di belakang origin/main. Perbandingan dua ujung ini juga memungkinkan peninjauan commit masuk sebelum menyatukannya, dan pola pemeriksaan dua arah dengan notasi kiri..kanan berlaku di sini, dengan origin/main pada salah satu sisinya.

Dua repository lokal bertukar commit melalui remote pusatRepository Budimainoriginrepository bareRepository Citramaingit push →← git fetchgit push →← git fetch
Dua repository lokal saling menggabungkan pekerjaan melalui satu remote pusat

Repository bare sebagai pusat bersama#

Repository bare dibuat dengan git init --bare dan isinya adalah folder .git tanpa working directory. Bentuk ini cocok sebagai pusat bersama karena tidak ada sesi kerja yang perlu dilindungi, sehingga setiap anggota tim bebas mengirim dan mengambil. Pada layanan hosting, repository proyek juga berbentuk bare, dan URL-nya dipakai persis seperti URL lokal pada contoh di atas.

Pengiriman ke repository yang memiliki working directory, sebaliknya, ditolak Git untuk branch yang sedang dipakai, karena perubahan riwayatnya akan membuat berkas di working directory menjadi tidak serasi. Pesan penolakannya menyebut refusing to update checked out branch. Aturan ini menjelaskan mengapa pusat bersama selalu bare, atau pada layanan hosting selalu diakses hanya melalui tukar-menukar commit.

Ringkasan#

  • Remote adalah nama untuk URL repository lain, dengan origin sebagai nama kebiasaan baku hasil git clone.
  • git remote -v menampilkan URL untuk arah fetch dan push, dan remote dikelola pada tingkat konfigurasi repository.
  • Branch pelacak remote seperti origin/main adalah potret informasi terakhir dari remote, yang hanya bergerak saat fetch atau pull.
  • Repository bare tanpa working directory menjadi bentuk baku pusat bersama, baik lokal maupun pada layanan hosting.

Referensi#