Apa perbedaan antara `git fetch origin` dan` git remote update origin`?

115

Menanggapi pertanyaan tentang menarik satu komit pada waktu dari repositori git , saya disarankan untuk menggunakan git remote updatebukan git fetch. Saya telah membaca kedua halaman manual tetapi tidak dapat mengatakan bahwa saya mengerti secara keseluruhan.

Adakah yang bisa menjelaskan kepada saya bagaimana git fetch origindan get remote update originberperilaku berbeda?

Norman Ramsey
sumber

Jawaban:

133

Tidak ada bedanya bila digunakan seperti ini.

remote updateadalah perintah tingkat tinggi - ini mendukung remote yang dikelompokkan ( remotes.<group> = <list>), dan memperbarui semua remote (kecuali yang memiliki remote.<name>.skipDefaultUpdateset), tetapi bukan opsi pengambilan yang lebih spesifik. Namun, di bawah kap, ia melakukan hal yang sama persis seperti pengambilan dengan opsi default.

Jawaban yang merekomendasikan remote updatealih-alih git fetch sebenarnya merekomendasikannya tanpa nama jarak jauh, hanya untuk mengambil semua, bukan hanya yang dinamai sebagai argumen. Ini sama dengan git fetch --all.

Saya harus menambahkan peringatan bahwa pengambilan dan pembaruan jarak jauh tidak benar-benar menggunakan jalur kode yang sama hingga v1.6.6.1 (dirilis 23 Desember 2009). Bahkan sebelum itu, meskipun, mereka pada dasarnya melakukan hal yang sama, hanya menggunakan kode yang berbeda (mungkin berperilaku sedikit berbeda dalam kasus sudut, tapi saya tidak dapat memikirkan apapun di luar kepala saya).

Bertingkat
sumber
1
Sangat menarik. +1. Jika Anda melihat catatan rilis Git (yang telah saya kompilasi di sini: pastebin.com/LNhRhQS3 ), tampaknya hanya 1.7.0 (setelah 1.6.6.2) yang memungkinkan " git fetch --all" digunakan sebagai pengganti " git remote update".
VonC
Ah, saya tidak benar-benar memeriksa ketika fetch --allmasuk. Saya melakukan semua ini hanya dengan variasi git log --grep=...dan git describe --containspada klon git.git saya.
Kaskabel
Hm, itu aneh - komit 9c4a036b adalah "Ajarkan opsi --semua untuk 'git fetch'", dan git menjelaskan - berisi memberi v1.6.6.1~1^2~9. (Rilis yang sama dengan perubahan pembaruan jarak jauh yang saya sebutkan dalam jawaban saya, diperbarui untuk menambahkan versi rilis minor di sana). Mungkin baru terlambat masuk ke catatan rilis?
Kaskabel
@Jefromi: cara yang bagus untuk menggali informasi itu, tetapi saya lebih suka melihat catatan rilis terlebih dahulu dan merasa frustrasi dengan kurangnya satu halaman untuk semua catatan rilis, oleh karena itu saya sedikit menyalin-tempel di pastebin.
VonC
@Jefromi: sekarang ... sekarang saya harus menemukan cara untuk mengumpulkan semua "apa yang dimasak di Git" untuk melihat mengapa commit 9c4a036b tidak berhasil dalam rilis resmi sebelum 1.7;)
VonC