Apa perbedaan antara asal dan hulu di GitHub?

409

Apa perbedaan antara origindan upstreamdi GitHub ?

Ketika git branch -aperintah selesai, beberapa cabang memiliki awalan origin( remotes/origin/..) sementara yang lain memiliki awalan upstream( remotes/upstream/..).

jan
sumber
3
Terkait: Definisi "hilir" dan "hulu" di git.
RBT

Jawaban:

805

Ini harus dipahami dalam konteks garpu GitHub (di mana Anda membayar repo GitHub di GitHub sebelum mengkloning garpu itu secara lokal).

  • upstreamumumnya merujuk pada repo asli yang telah Anda forked
    (lihat juga " Definisi" downstream"dan" upstream" " untuk informasi lebih lanjut tentang upstreamistilah)
  • origin adalah fork Anda: repo Anda sendiri di GitHub, klon dari repo asli GitHub

Dari halaman GitHub:

Ketika repo dikloning, ia memiliki remote default originyang menunjuk ke fork Anda di GitHub, bukan repo asli yang menjadi asal forkednya.
Untuk melacak repo asli, Anda perlu menambahkan nama lain dari jarak jauhupstream

git remote add upstream git://github.com/<aUser>/<aRepo.git>

(dengan aUser/aReporeferensi untuk pembuat dan repositori asli, yang telah Anda garpu)

Anda akan menggunakan upstreamuntuk mengambil dari repo asli (agar salinan lokal Anda tetap sinkron dengan proyek yang ingin Anda kontribusikan).

git fetch upstream

( git fetchsendirian akan diambil originsecara default, yang tidak diperlukan di sini)

Anda akan digunakan originuntuk menarik dan mendorong karena Anda dapat berkontribusi ke repositori Anda sendiri.

git pull
git push

(sekali lagi, tanpa parameter, 'asal' digunakan secara default)

Anda akan berkontribusi kembali ke upstreamrepo dengan mengajukan permintaan penarikan .

garpu dan hulu

VONC
sumber
11
Ini juga membantu mengetahui apa yang upstreamsecara umum: stackoverflow.com/questions/2739376/…
VonC
2
@ MaxRydahlAndersen benar, tapi saya suka menggunakan Git tanpa bungkus, jadi saya akan menjaga konvensi itu (hulu vs asal) untuk saat ini.
VonC
22
Sejauh ini penjelasan terbaik tentang cara kerja garpu yang telah saya lihat. Anda mendapatkan upvote saya.
CodeChimp
9
Karya bagus di bidang visual. Jawabannya sangat lurus ke depan dan bisa dimengerti. Ini persis apa yang saya cari.
tayopi
1
@iamrudra jika git remote -v menunjukkan url yang sama untuk asal dan hulu, maka ya, Anda mendorong repo jarak jauh yang sama.
VonC