Git: yang merupakan remote dikonfigurasi standar untuk cabang?

192

Saya memiliki repositori telanjang hub. Saya hanya bekerja di mastercabang. Kalimat terakhir dari pesan kesalahan ini di bawah ini membuat saya bertanya-tanya: Bagaimana cara mencari tahu mana yang merupakan "remote konfigurasi default untuk cabang Anda saat ini" ? Dan bagaimana cara mengaturnya?

[myserver]~/progs $ git remote -v
hub     ~/sitehub/progs.git/ (fetch)
hub     ~/sitehub/progs.git/ (push)

[myserver]~/progs $ git branch -r
  hub/master

[myserver]~/progs $ cat .git/HEAD
ref: refs/heads/master

[myserver]~/progs $ git pull hub
You asked to pull from the remote 'hub', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.
leonbloy
sumber

Jawaban:

230

Lacak cabang jarak jauh

Anda dapat menentukan repositori jarak jauh default untuk mendorong dan menarik menggunakan opsi track git-branch. Anda biasanya melakukan ini dengan menentukan opsi --track ketika membuat cabang master lokal Anda, tetapi karena sudah ada, kami hanya akan memperbarui konfigurasi secara manual seperti:

Edit .git/config

[branch "master"]
  remote = origin
  merge = refs/heads/master

Sekarang Anda cukup git push dan git pull.

[ sumber ]

scragz
sumber
Bukankah ini juga akan ditetapkan jika OP melakukannya git pull hub master?
Ryan Bigg
@Ryan Bigg: Tidak secara otomatis, atau Anda akan selalu mengacaukan konfigurasi Anda.
colek
36
Mengapa mengedit file config ketika perintah git ada karena alasan ini?
urschrei
43
cabang git --set-upstream local_branch remote / remote_branch (atau ketika mendorong, seperti dijelaskan di bawah ini)
urschrei
25
@scragz: Tidak mungkin! pendekatan perintah menjamin .gitconfig Anda dibiarkan dalam keadaan yang berarti.
smci
260

Anda dapat melakukannya dengan lebih sederhana, menjamin bahwa Anda .gitconfigdibiarkan dalam keadaan yang bermakna:

Menggunakan Git versi v1.8.0 dan lebih tinggi

git push -u hub master saat mendorong, atau:
git branch -u hub/master

ATAU

(Ini akan mengatur remote untuk cabang saat check-out untuk hub/master)
git branch --set-upstream-to hub/master

ATAU

(Ini akan mengatur remote untuk cabang bernama branch_nameuntuk hub/master)
git branch branch_name --set-upstream-to hub/master

Jika Anda menggunakan v1.7.xatau sebelumnya

Anda harus menggunakan --set-upstream:
git branch --set-upstream master hub/master

urschrei
sumber
3
Bagi siapa pun yang bertanya-tanya: perintah kedua dapat digunakan untuk cabang yang ada
Eric Hu
1
@ eric-hu sebagaimana terinci dalam jawaban saya di sini: stackoverflow.com/questions/4878249/…
urschrei
1
The set-upstream[-to]perintah perubahan saat ini jauh dikonfigurasi. Poster asli bertanya tentang remote yang dikonfigurasi secara default . Tentunya itu bukan konsep yang sama?
Steve Pitchers
1
Setiap cabang memiliki remote yang saat ini dikonfigurasi, yang menentukan cabang mana pada remote yang sesuai dengan cabang lokal. The bawaan dikonfigurasi terpencil menentukan cabang didorong atau ditarik jika Anda tidak menentukan satu eksplisit. Jawaban ini hanya mengatur yang sekarang . Jawaban yang diterima (pengeditan dengan tangan) juga memungkinkan Anda untuk mengatur yang default . Apakah ada yang tahu perintah yang menghindari harus mengedit dengan tangan?
Steve Pitchers
1
--set-upstream-tomembuat perubahan yang persis sama .git/configseperti yang disarankan @scragz dalam jawabannya .
strah
-1

perintah untuk mendapatkan remote push yang efektif untuk cabang, mis. master, adalah:

git config branch.master.pushRemote || git config remote.pushDefault || git config branch.master.remote

Inilah sebabnya (dari output "man git config"):

branch.name.remote [...] memberitahu git fetch dan git push yang mengambil remote / push ke [...] [for push] dapat diganti dengan remote.pushDefault (untuk semua cabang) [dan] untuk cabang saat ini [..] selanjutnya ditimpa oleh branch.name.pushRemote [...]

Untuk beberapa alasan, "man git push" hanya bercerita tentang branch.name.remote (walaupun memiliki paling sedikit prioritas di antara ketiganya) + secara keliru menyatakan bahwa jika tidak disetel, dorong default ke asal - tidak, hanya saja bahwa ketika Anda mengkloning repo, branch.name.remote diatur ke asal, tetapi jika Anda menghapus pengaturan ini, git push akan gagal, meskipun Anda masih memiliki remote asal

darkdiatel
sumber
Pertanyaan ini sudah dijawab dengan jawaban yang lebih bermanfaat.
Austin Schäfer