Git: qual è il telecomando configurato di default per la filiale?


192

Ho un repository nudo remoto hub. Lavoro solo nel masterramo. L'ultima frase di questo messaggio di errore qui sotto mi fa meravigliare: come faccio a sapere qual è il "telecomando configurato di default per il tuo ramo attuale" ? E come lo imposto?

[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.

Risposte:


230

Traccia il ramo remoto

È possibile specificare il repository remoto predefinito per il push e il pull usando l'opzione track di git-branch. Normalmente lo faresti specificando l'opzione --track quando crei il tuo ramo master locale, ma siccome esiste già aggiorneremo manualmente la configurazione in questo modo:

Modifica il tuo .git/config

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

Ora puoi semplicemente git push e git pull.

[ fonte ]


Questo non verrebbe impostato anche se lo facesse l'OP git pull hub master?
Ryan Bigg,

@Ryan Bigg: non automaticamente, altrimenti avresti sempre rovinato la tua configurazione.
colpì il

36
Perché modificare un file di configurazione quando esistono comandi git proprio per questo motivo?
urschrei,

43
git branch --set-upstream local_branch remote / remote_branch (o quando si spinge, come descritto di seguito)
urschrei

25
@scragz: Assolutamente no! l'approccio del comando garantisce che .gitconfig sia lasciato in uno stato significativo.
smci,

260

Puoi farlo in modo più semplice, garantendo che .gitconfigrimanga in uno stato significativo:

Utilizzando Git versione v1.8.0 e successive

git push -u hub master quando si spinge o:
git branch -u hub/master

O

(Questo imposterà il telecomando per il ramo attualmente estratto su hub/master)
git branch --set-upstream-to hub/master

O

(Questo imposterà il telecomando per il ramo chiamato branch_namea hub/master)
git branch branch_name --set-upstream-to hub/master

Se stai usando v1.7.xo prima

devi usare --set-upstream:
git branch --set-upstream master hub/master


3
Per chiunque si chieda: il secondo comando può essere utilizzato per le filiali esistenti
Eric Hu,

1
@ eric-hu come dettagliato nella mia risposta qui: stackoverflow.com/questions/4878249/...
Urschrei

1
Il set-upstream[-to]comando modifica il telecomando attualmente configurato. Il poster originale ha chiesto informazioni sul telecomando configurato di default . Non è sicuramente lo stesso concetto?
Steve Pitchers,

1
Ogni ramo ha un telecomando attualmente configurato, che specifica quale ramo su quel telecomando corrisponde al ramo locale. Il telecomando configurato di default determina quale ramo viene spinto o estratto se non ne specifichi esplicitamente uno. Questa risposta imposta solo quella attuale . La risposta accettata (modifica a mano) consente anche di impostare quella predefinita . Qualcuno conosce un comando che evita di doverlo modificare manualmente?
Steve Pitchers,

1
--set-upstream-toapportato esattamente le stesse modifiche .git/configsuggerite da @scragz nella sua risposta .
strah


-1

il comando per ottenere il telecomando push effettivo per il ramo, ad esempio master, è:

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

Ecco perché (dall'output "man git config"):

branch.name.remote [...] dice a git fetch e git push quale telecomando per recuperare da / push a [...] [per push] può essere sovrascritto con remote.pushDefault (per tutti i rami) [e] per il ramo corrente [..] ulteriormente sovrascritto da branch.name.pushRemote [...]

Per qualche ragione, "man git push" dice solo su branch.name.remote (anche se ha la precedenza minima delle tre) + afferma erroneamente che se non è impostato, spingere i valori predefiniti sull'origine - non lo è, è solo che quando clonate un repository, branch.name.remote è impostato su origin, ma se rimuovete questa impostazione, git push fallirà, anche se avete ancora l'origine remote


A questa domanda è già stata data una risposta più utile.
Austin Schäfer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.