Git: który jest domyślnie skonfigurowanym pilotem dla oddziału?

192

Mam zdalne nagie repozytorium hub. Pracuję tylko w masteroddziale. Ostatnie zdanie tego komunikatu o błędzie powoduje, że zastanawiam się: w jaki sposób mogę dowiedzieć się, który jest „domyślnie skonfigurowanym pilotem dla bieżącej gałęzi” ? I jak to ustawić?

[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
źródło

Odpowiedzi:

230

Śledź zdalną gałąź

Możesz określić domyślne zdalne repozytorium do wypychania i ciągnięcia za pomocą opcji śledzenia git-branch. Zwykle robiłbyś to, określając opcję --track podczas tworzenia lokalnego oddziału głównego, ale ponieważ już istnieje, po prostu zaktualizujemy konfigurację ręcznie w następujący sposób:

Edytuj swój .git/config

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

Teraz możesz po prostu git push i git pull.

[ źródło ]

scragz
źródło
Czy nie byłoby to również ustawione, gdyby PO git pull hub master?
Ryan Bigg
@Ryan Bigg: Nie automatycznie, bo zawsze spieprzyłbyś swoją konfigurację.
poke
36
Po co edytować plik konfiguracyjny, gdy z tego powodu istnieją komendy git?
urschrei
43
git branch --set-upstream local_branch remote / remote_branch (lub podczas wypychania, jak opisano poniżej)
urschrei 31.01.11
25
@scragz: Nie ma mowy! metoda poleceń gwarantuje, że Twój .gitconfig pozostaje w znaczącym stanie.
smci
260

Możesz to zrobić prościej, gwarantując, że .gitconfigpozostaniesz w znaczącym stanie:

Korzystanie z Gita w wersji v1.8.0 i nowszej

git push -u hub master podczas pchania lub:
git branch -u hub/master

LUB

(Spowoduje to ustawienie pilota dla aktualnie wyewidencjonowanego oddziału na hub/master)
git branch --set-upstream-to hub/master

LUB

(Spowoduje to ustawienie pilota do oddziału o nazwie branch_namedo hub/master)
git branch branch_name --set-upstream-to hub/master

Jeśli używasz v1.7.xlub wcześniej

musisz użyć --set-upstream:
git branch --set-upstream master hub/master

urschrei
źródło
3
Dla każdego, kto zastanawia się: drugie polecenie może być użyte dla istniejących gałęzi
Eric Hu
1
@ eric-hu, jak wyszczególniono w mojej odpowiedzi tutaj: stackoverflow.com/questions/4878249/…
urschrei
1
set-upstream[-to]Polecenie zmienia obecnie skonfigurowana pilota. Oryginalny plakat zapytał o domyślnie skonfigurowanego pilota. Z pewnością nie jest to ta sama koncepcja?
Steve Pitchers
1
Każda gałąź ma aktualnie skonfigurowanego pilota, określając, która gałąź na tym pilocie odpowiada lokalnemu. Domyślne skonfigurowane zdalne określa, która gałąź jest pchania lub ciągnięcia jeśli nie podasz wyraźnie. Ta odpowiedź ustawia tylko bieżącą . Zaakceptowana odpowiedź (edycja ręczna) pozwala również ustawić domyślną . Czy ktoś zna polecenie, które pozwala uniknąć ręcznej edycji?
Steve Pitchers
1
--set-upstream-todokonał dokładnie takich samych zmian, .git/configjakie sugerował @scragz w swojej odpowiedzi .
strah
-1

polecenie, aby uzyskać skuteczny zdalny push dla gałęzi, np. master, to:

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

Oto dlaczego (z wyniku „man git config”):

branch.name.remote [...] informuje git fetch i git push, który pilot do pobrania z / push do [...] [dla push] może zostać zastąpiony zdalnym.pushDefault (dla wszystkich gałęzi) [i] dla aktualny oddział [..] dodatkowo przesłaniany przez branch.name.pushRemote [...]

Z jakiegoś powodu „man git push” mówi tylko o branch.name.remote (nawet jeśli ma najmniejszy priorytet z trzech) + błędnie stwierdza, że ​​jeśli nie jest ustawiony, push domyślnie do źródła - nie, to po prostu że po sklonowaniu repozytorium gałąź.nazwa.zdatkowa jest ustawiona na początek, ale jeśli usuniesz to ustawienie, git push nie powiedzie się, nawet jeśli nadal masz zdalny początek

Darkdiatel
źródło
Na to pytanie już udzielono bardziej użytecznej odpowiedzi.
Austin Schäfer,