Получение существующих веток git для отслеживания удаленных веток

81

Мой обычный рабочий процесс при работе с git выглядит примерно так:

  1. создать локальный репозиторий
  2. поработайте в этом репозитории, добавьте / измените файлы и т. д.
  3. решите, что мне нужно центральное удаленное место для репозитория, и создайте его
  4. отправьте все коммиты из моего локального репозитория в этот новый удаленный репозиторий

Однако теперь я хочу иметь возможность входить pushи выходить pullиз этого удаленного репозитория без необходимости указывать, куда я нажимаю или извлекаю; Я хочу, чтобы мой локальный мастер отслеживал удаленного мастера.

Правильный способ сделать это не ясно для меня, и я не смог определить его из документации, даже если это не должно быть действительно больше , чем одна команда.

Поскольку это делается только один раз для каждого репозитория, я обычно использовал одно из двух простых, но хакерских решений:

  1. используется git cloneдля создания нового локального репозитория и удаления старого. После клонирования git новый репозиторий настраивается для отслеживания происхождения.
  2. вручную отредактировал .git / config, чтобы создать источник мастер-трека.

Я думаю, что я смогу запустить команду, возможно, в какой-то форме, git remoteчтобы настроить существующий репозиторий, чтобы мастер отслеживал удаленный мастер. Кто-нибудь может сказать мне, что это за команда?

SpoonMeiser
источник
На самом деле оказывается, что подобный вопрос задавался раньше: stackoverflow.com/questions/312055/…
SpoonMeiser
Для версии git> = 1.7.0.0 вы можете сделать это одной командой, это объясняется здесь .
KiRPiCH
4
На самом деле это дубликат: stackoverflow.com/questions/520650/…
takehin 07

Ответы:

156

Используйте set-upstream arg:

git branch --set-upstream local-branch-name origin/remote-branch-name

Выполнение указанной выше команды обновляет ваш файл .git / config правильно и даже проверяется с помощью этого вывода:

«Локальное-имя-ветки филиала настроено для отслеживания удаленного имени-ветки удаленного филиала от источника».

РЕДАКТИРОВАТЬ: Как сказал martijn : «В версии Git v1.8.0 --set-upstream устарел. Вместо этого используйте --set-upstream-to».

git branch --set-upstream-to local-branch-name origin/remote-branch-name

См. Это для получения дополнительной информации.

Хорхе
источник
18
В версии Git v1.8.0 --set-upstreamустарел. --set-upstream-toВместо этого используйте .
Martijn
1
Используйте, git remote show <remote>чтобы узнать, какие филиалы отслеживаются вашими местными филиалами
naitsirch
1
Это предлагаемое изменение не должно было быть одобрено, оно в корне изменило ответ (и оставило его в неправильном состоянии, поскольку аргументы новой опции поменялись местами). Пусть исходный постер решит, хочет ли он обновить свой ответ.
1
Вы также можете снова нажать ветку с помощьюgit push -u
mattr
Не set upstreamнастраивает сопоставления без ввода кода? push заставляет вас нажать код для создания сопоставлений. Может быть, у вас еще нет кода, но вы хотите установить сопоставление?
user20358 09
19

git help remoteдолжен показать вам то, что вам нужно знать. Я думаю, что ты хочешь

git remote add [remote-name] [remote-url]

# Set a local branch to follow the remote
git config branch.[branch-name].remote [remote-name]

# Set it to automatically merge with a specific remote branch when you pull
git config branch.[branch-name].merge [remote-master]

Вы также можете вручную отредактировать .git / config, чтобы настроить их.

Майк Пейп
источник
Другой вариант - создать центральный репозиторий, затем удалить рабочий каталог и воссоздать его путем клонирования из центрального репозитория. Однако редактирование .git / config будет более информативным.
Уильям Перселл,
клонирование центрального репозитория и редактирование .git / config - это два варианта, о которых я уже упоминал в своем вопросе.
SpoonMeiser
8

Вы также можете использовать это, если хотите создать новую локальную ветку для отслеживания удаленной ветки:

git checkout --track -b [branch_name] --track origin[or other remote name]/[remote_branch_name] 

или даже лучше:

git checkout -t origin/branch_name
оборота bcolfer
источник
git checkout --track -b имя-ветки origin имя-ветки fatal: git checkout: обновление путей несовместимо с переключением ветвей. Вы намеревались оформить заказ "origin / branchname", который не может быть решен как фиксация?
edebill
6

В более новых версиях git вы можете использовать

git branch --track origin/branch_name
fazineroso
источник
4
Это сообщение автоматически помечается как низкое качество, потому что это очень короткий / единственный код. Не могли бы вы расширить его, добавив текст, объясняющий, как он решает проблему?
gung - Reinstate Monica
Это самый точный ответ! Все вышеперечисленное не является неправильным или больше не поддерживаетсяgit branch --set-upstream BRANCH fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
GTodorov
3

The --set-upstream flag is deprecated and will be removed.

git branch master --set-upstream-to myupstream/master

Денис С
источник
1

Перенесемся на три года вперед (посмотрите, что я там делал :-)), я попытался вытащить неотслеживаемую ветку с помощью Git Bash и получил

If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream-to=origin/<branch> develop

Следующее достигло того, что мне было нужно:

$ git branch --set-upstream-to=origin/develop develop Branch 'develop' set up to track remote branch 'develop' from 'origin'.

MikeA
источник
-1

Используйте эту команду:

git clone [<options>] [--] <repo> [<dir>]
РидаХлели
источник
Привет, вы можете перечитать вопрос - он снова упоминает клонирование репозитория, но вопрос заключается в том, когда локальный репозиторий был создан первым и изначально не отслеживал удаленный.
SpoonMeiser