Отримання існуючих гілок git для відстеження віддалених гілок


81

Мій звичайний робочий процес при роботі з git, приблизно такий:

  1. створити локальне сховище
  2. виконати якусь роботу в цьому сховищі, додавати / змінювати файли тощо.
  3. вирішити, що я хочу центральне віддалене місце для сховища, і створити його
  4. надсилати всі коміти з мого локального сховища до цього нового віддаленого сховища

Тепер, однак, я хочу мати можливість pushі pullз цього віддаленого сховища без необхідності вказувати, куди я штовхаю чи тягну; Я хочу, щоб мій місцевий майстер відстежував віддаленого майстра.

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

Оскільки це щось, що робиться лише раз на сховище, я, як правило, використовую одне з двох простих, але шалених рішень:

  1. використовується git cloneдля створення нового локального сховища, а старе видалено. Після клонування git нове сховище налаштовано на відстеження походження.
  2. вручну відредаговано .git / config, щоб зробити початкове джерело треку.

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


На самому ділі виявляється, що подібне питання було поставлене до: stackoverflow.com/questions/312055 / ...
SpoonMeiser

Для git версії> = 1.7.0.0 ви можете зробити це однією командою, це пояснено тут .
KiRPiCH

4
Це на самому ділі дублікат: stackoverflow.com/questions/520650 / ...
takeshin

Відповіді:


156

Використовуйте аргумент set-upstream:

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

Запуск вищевказаної команди коректно оновлює ваш файл .git / config і навіть перевіряє за допомогою цього виводу:

"Встановлено місцеве відділення-ім'я-гілки для відстеження віддаленого відділення-імені-гілки від походження."

EDIT: Як сказав 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

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

git checkout --track -b ім'я гілки походження ім'я гілки fatal: git checkout: оновлення шляхів несумісне з перемиканням гілок. Ви мали намір перевірити "джерело / ім'я гілки", яке не можна вирішити як коміт?
edebill

6

На новіших версіях git ви можете використовувати

git branch --track origin/branch_name

4
Цей допис автоматично позначається як низькоякісний, оскільки він є таким коротким / єдиним кодом. Не могли б ви розширити його, додавши якийсь текст, щоб пояснити, як це вирішує проблему?
gung - Відновити Моніку

Це найточніша відповідь! Все вищезазначене не є неправильним або більше не підтримуєтьсяgit branch --set-upstream BRANCH fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
Г.Т.Тодоров

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


-1

Використовуйте цю команду:

git clone [<options>] [--] <repo> [<dir>]

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