Git: який за замовчуванням налаштований віддалений для відділення?


192

У мене віддалений голий сховище hub. Я працюю лише у masterфілії. Останнє речення цього повідомлення про помилку нижче змушує мене замислитись: Як я дізнаюся, який "віддалений налаштований за замовчуванням для вашої поточної гілки" ? І як це я встановити?

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

Відповіді:


230

Відстежте віддалену гілку

Ви можете вказати віддалений сховище за замовчуванням для натискання та витягування за допомогою параметра треку git-branch. Зазвичай ви робите це, вказуючи параметр --track під час створення вашої локальної ведучої гілки, але оскільки він уже існує, ми просто оновлюємо конфігурацію вручну так:

Відредагуйте свій .git/config

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

Тепер ви можете просто git push і git pull.

[ джерело ]


Чи не було б це також встановлено, якби ОП це зробило git pull hub master?
Райан Бігг

@Ryan Bigg: Не автоматично, інакше ви б завжди накрутили конфігурацію.
ткнути

36
Навіщо редагувати файл конфігурації, коли саме з цієї причини існують команди git?
urschrei

43
git branch - встановити-upstream local_branch віддалений / remote_branch (або при натисканні, як детально описано нижче)
urschrei

25
@scragz: Ні в якому разі! командний підхід гарантує, що ваш .gitconfig залишиться у значущому стані.
smci

260

Ви можете це зробити простіше, гарантуючи, що ваш .gitconfigлишився в значущому стані:

Використання версії Git v1.8.0 і вище

git push -u hub master при натисканні, або:
git branch -u hub/master

АБО

(Це встановить пульт дистанційного керування для в даний час витягнутої гілки до hub/master)
git branch --set-upstream-to hub/master

АБО

(Це встановить пульт дистанційного доступу для гілки, названої branch_nameв hub/master)
git branch branch_name --set-upstream-to hub/master

Якщо ви використовуєте v1.7.xчи раніше

ви повинні використовувати --set-upstream:
git branch --set-upstream master hub/master


3
Для всіх, хто цікавиться: другу команду можна використовувати для існуючих гілок
Ерік Ху

1
@ Ерік-х , як описано в моїй обороні тут: stackoverflow.com/questions/4878249 / ...
urschrei

1
set-upstream[-to]Команда змінює собі налаштований пульт дистанційного керування. Оригінальний плакат запитав про налаштований за замовчуванням пульт. Напевно, це не зовсім та сама концепція?
Стів Пітчерс

1
Кожна гілка має поточно налаштований віддалений, вказуючи, яка гілка на цьому віддаленому відповідає локальній гілці. За замовчуванням налаштований віддалений визначає , яка гілка штовхати або тягнути , якщо ви не вказали один явно. Ця відповідь встановлює лише поточну . Прийнята відповідь (редагування вручну) також дозволяє встановити типову . Хтось знає команду, яка уникає необхідності редагування вручну?
Стів Пітчерс

1
--set-upstream-toвніс ті самі зміни, що .git/configі @scragz запропонував у своїй відповіді .
страх

26

Для повноти: попередні відповіді говорять про те, як встановити гілку вище за течією, а не як її бачити.

Є кілька способів зробити це:

git branch -vvпоказує, що інформація для всіх галузей. (відформатовано синім кольором у більшості терміналів)

cat .git/config це також показує.

Довідково:


-1

команда отримати ефективний пульт дистанційного керування для гілки, наприклад, master, є:

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

Ось чому (з виводу "man git config"):

branch.name.remote [...] повідомляє git fetch та git push, який віддалений для отримання з / push до [...] [для push] може бути замінено на remote.pushDefault (для всіх гілок) [і] для поточна гілка [..] додатково перекреслена гілкою.name.pushRemote [...]

Чомусь "man git push" розповідає лише про branch.name.remote (хоча він має найменший пріоритет із трьох) + помилково стверджує, що якщо його не встановлено, натисніть за замовчуванням походження - це не так, це просто що коли ви клонуєте РЕПО, посилається посилання на сходинку.name.remote, але якщо ви видалите це налаштування, git push не вдасться, навіть якщо ви все ще маєте віддалений вихід


На це питання вже відповіли кориснішою відповіддю.
Остін Шефер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.