Halaman manual untuk git-config mencantumkan opsi ini untuk push.default:
nothing - do not push anything.
matching - push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default.
upstream - push the current branch to its upstream branch.
tracking - deprecated synonym for upstream.
current - push the current branch to a branch of the same name.
Dalam kebanyakan kasus, saya akan berasumsi bahwa mendorong ke cabang hulu cabang akan sama dengan mendorong ke cabang dengan nama yang sama, karena cabang hulu biasanya memiliki nama yang sama, dan karena cabang dengan nama yang sama ("saat ini" ) biasanya (atau selalu, menurut definisi?) upstream. Lalu apa bedanya?
PEMBARUAN : Halaman manual untuk git-config telah diperbarui (seperti yang diharapkan), jadi perbedaan yang dibuat di sana mungkin jauh lebih jelas sekarang.
git
git-branch
git-push
iconoclast
sumber
sumber
push.default is unset; its implicit value is changing in Git 2.0
dan tentangmatching
vs,simple
lihat stackoverflow.com/questions/13148066/…Jawaban:
Anda telah meringkas perbedaan dalam pertanyaan Anda.
upstream
mendorong ke cabang hulu yang dikonfigurasi , sementaracurrent
mengasumsikan cabang hulu memiliki nama yang sama dengan cabang lokal saat ini , dan mendorong ke nama spesifik tersebut. Pada kenyataannya, tidak ada alasan untuk menganggap cabang pelacakan hulu cabang lokal memiliki nama yang sama dengan cabang lokal itu sendiri.Misalnya, jika Anda bekerja di beberapa repositori atau di banyak remote developer bersama, Anda sering kali akhirnya melacak cabang berbeda dari cabang yang sama, seperti
allen-master
ataususan-master
, keduanya melacakmaster
cabang di repositori Allen dan Susan. Dalam kasus ini,current
akan menjadi pengaturan yang salah, karena nama cabang tersebut tidak ada di remote mereka.upstream
, bagaimanapun, akan bekerja dengan baik.Contoh yang lebih praktis mungkin melacak a
development
danproduction
repositori. Alur kerja Anda mungkin menggunakan cabang jalur utama yang berbeda untuk masing-masing, tetapi itu mungkin membingungkan. Misalkan Anda adalah integrator kode dan ingin melacakmaster
cabang kedua repositori secara terpisah.Sekarang Anda memiliki dua cabang yang melacak repositori masing-masing, tidak ada yang menggunakan
master
konvensi penamaan sama sekali. Ada sedikit kebingungan tentang nama cabang: Mereka secara eksplisit menjelaskan apa yang mereka lacak. Namun demikian,push.default = current
tidak masuk akal karena tidak ada remote yang berisidevelopment
atauproduction
cabang.sumber
upstream
lebih disukai daripadacurrent
. Saya pikir ini cukup jelas, jadi Anda sebaiknya memberi contoh untuk kasus sebaliknya.current
lebih baik jika Anda adalah pengembang baru karena Anda tidak perlugit config
terlalu banyak terutama jika Anda telah mengkloning dari suatu tempat.current
mendorong atau membuat-kemudian-mendorong-ke cabang homonymous pada repo jarak jauh untuk Anda jika mereka belum ada, sedangkansimple
akan menolak untuk melakukan ini secara langsung ketika cabang dengan nama yang sama belum ada.upstream
memiliki perilaku yang sama dalam kasus ini kecuali cabang upstream telah ditetapkan secara eksplisit atau ditetapkan seperti yang disebutkan dalam jawaban Yawar .current
akan mendorong cabang saat ini ke cabang dengan nama yang sama pada repo jarak jauh.upstream
akan mendorong cabang saat ini ke cabang hulu.Cabang upstream adalah cabang yang secara eksplisit atau implisit didefinisikan sebagai upstream dari cabang Anda saat ini. Itu berarti push dan pull secara default akan disinkronkan dengan cabang ini. Cabang hulu mungkin dalam repo yang sama dengan cabang saat ini itu sendiri. Anda dapat melakukan hal-hal menarik seperti menyiapkan cabang master lokal Anda sebagai upstream dari cabang fitur (topik) lokal Anda , dan mendorong dan menarik di antaranya.
Penyiapan upstream implisit dilakukan melalui nilai
branch.autosetupmerge
config. Anda dapat menemukan dokumentasi digit config
halaman bantuan. Penyiapan upstream eksplisit dilakukan dengan-u
opsi kegit branch
perintah. Lihat halaman bantuan untuk detailnya.sumber
branch.autoSetupMerge
melakukan hal yang sama dengan-u
/--set-upstream
. Setidaknya, saya tidak melihat apa pun dalam dokumentasi yang menyiratkan bahwa itu membuat git push berperilaku seolah-olah dipanggil-u
secara default, yang menurut saya seperti yang Anda katakan. Bisakah Anda menjelaskan apa yang Anda maksud?branch.autoSetupMerge
konfigurasi secara default membuat cabang lokal baru dan menyetel hulu sebagai cabang pelacakan jarak jauh. Tindakan implisit ini dapat dilakukan secara eksplisit dengan menggunakan flag-t
(--track
) atau-u ...
(--set-upstream-to=...
), yang melakukan hal yang sama dengan sintaks yang sedikit berbeda.git push
, saya (secara keliru) berasumsi bahwa Anda berbicara tentang-u
opsigit push
, bukan-u
opsigit branch
. Maaf atas kebingungannya :)