Що таке гілка відстеження?


173

Чи може хтось пояснити "гілку відстеження", як це стосується git?

Ось визначення з git-scm.com :

"Гілка відстеження" в Git - це локальна гілка, яка з'єднана з віддаленою гілкою. Коли ви натискаєте і тягнете за цю гілку, вона автоматично натискає і тягне до віддаленої гілки, з якою вона пов'язана.

Використовуйте це, якщо ви завжди тягнете з тієї ж гілки вище за течією до нової гілки, і якщо ви не хочете явно використовувати "git pull".

На жаль, будучи новим в git і походить від SVN, це визначення для мене абсолютно не має сенсу.

Я читаю " Прагматичний посібник з Git " (до речі, чудова книга), і, здається, вони підказують, що відстеження гілок - це хороша річ, і що після створення першого пульта (джерело, в даному випадку) ви повинні встановіть свою головну гілку як гілку відстеження, але вона, на жаль, не пояснює, чому гілка відстеження є хорошою справою або які вигоди ви отримуєте, встановивши свою головну гілку як гілку відстеження вашого сховища походження .

Може хтось, будь ласка, просвітить мене (англійською)?


6
Одна термінологія Примітка: слово доріжки , в Git, дуже сильно перевантажені. Деякі файли відстежуються, а деякі - не відстежуються ; деякі назви гілок називають гілками дистанційного відстеження; і ви можете скористатися --trackопцією для створення (локальної) гілки, яка має одну з цих гілок віддаленого відстеження, встановлену як її верхню течію . Термінологія дещо розвинулася між 2006 та 2019 роками, тому різні люди можуть іноді означати щось інше під кожне з цих слів.
Торека

Я особисто рекомендую використовувати назви віддаленого відстеження фрази замість гілок віддаленого відстеження , частково тому, що слово гілка також досить перевантажена. Імена віддаленого відстеження - це такі, які виглядають так origin/master: вони знаходяться у вашому сховищі, але вони є вашим способом запам'ятовування імен гілок, як видно в інших сховищах Git origin. Якщо ви потім використовувати слово вгору по течії , яке є більш сучасним терміном, щоб сказати , що ваш masterвже origin/masterвстановлений в якості його вгору по течії , ви можете уникнути всього цього термінологічної плутанини.
Торека

Відповіді:


141

ProGit книга має дуже гарне пояснення :

Відстеження гілок

Перевірка локальної гілки з віддаленої гілки автоматично створює те, що називається гілкою відстеження. Відстежуючі гілки - це локальні гілки, які мають пряме відношення до віддалених гілок. Якщо ви перебуваєте на гілці відстеження і вводите git push, Git автоматично знає, до якого сервера та гілки натиснути. Крім того, запущений git pullпід час однієї з цих гілок отримує всі віддалені посилання, а потім автоматично об'єднується у відповідну віддалену гілку.

Коли ви клонуєте сховище, воно, як правило, автоматично створює головну гілку, яка відстежує походження / master. Ось чому git pushі git pullпопрацюйте з коробки, не маючи інших аргументів. Однак ви можете встановити інші гілки відстеження, якщо бажаєте - ті, які не відслідковують гілки за походженням і не відстежують головну гілку. Простий випадок - приклад, який ви щойно побачили, працює git checkout -b [branch] [remotename]/[branch]. Якщо у вас є версія Git 1.6.2 або пізнішої версії, ви також можете скористатися --trackскороченням:

$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "serverfix"

Щоб налаштувати локальну гілку з іншою назвою, ніж віддалена гілка, ви можете легко використовувати першу версію з іншою назвою місцевої гілки:

$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "sf"

Тепер ваша місцева філія sfавтоматично підштовхуватиметься та вилучатиметься з неї origin/serverfix.

БОНУС: додаткова git statusінформація

Завдяки гілці відстеження git statusпідкаже, чи далеко ви відстаєте від своєї гілки відстеження - корисно нагадати, що ви ще не натиснули свої зміни! Це виглядає приблизно так:

$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

або

$ git status
On branch dev
Your branch and 'origin/dev' have diverged,
and have 3 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)


21
Просто хотілося прояснити це: "Перевірка локальної гілки з віддаленої гілки автоматично створює те, що називається гілкою відстеження". Це вводить в оману. Без параметра --track будь-яка створена вами гілка не буде відстежувати.
JohnO

@JohnO, можливо, захоче взятися за це з хлопцем Pro Git. Вся книга - результат масштабного редагування співпраці IIRC.
Ассаф Лав'є

2
@ JohnO, згідно з: sbf5.com/~cduan/technical/git/git-4.shtml - трек увімкнено за замовчуванням, тому не потрібно.
Хенк Лін

50

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

введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення


Відстеження гілок та "git fetch":

введіть тут опис зображення введіть тут опис зображення введіть тут опис зображення


Дякуємо за замітки! Ви б не могли поділитися ними всім, якщо можливо? Дякую;
Адітя

@Aditya: Це питання для відстеження гілок, і я опублікував усі свої замітки з цієї теми. Якщо я знайду якесь інше відповідне запитання, де можу розмістити свої інші нотатки GIT, я буду радий це зробити.
Гагравал

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

@Aditya: Ах, бачу. Тепер вам зрозуміло, що ви маєте на увазі. Я біжу позаду на своєму веб-сайті, але ще створити його для себе.
hagrawal

43

У книзі Pro Git згадується :

Відстежуючі гілки - це локальні гілки, які мають пряме відношення до віддалених гілок

Не зовсім. Питання ТА " Маючи важке розумінняgit-fetch " включає:

Не існує такої концепції місцевих гілок стеження , лише віддалені гілки стеження .
Так origin/masterє відділення віддаленого відстеження masterв originРЕПО.

Але насправді, як тільки ви встановите зв'язок гілки за течією між:

  • місцева філія, як master
  • і відділення віддаленого відстеження, як origin/master

Тоді ви можете розглядати masterяк локальну гілку відстеження : вона відслідковує віддалену гілку відстеження, origin/master яка, у свою чергу, відстежує головну гілку репо- виходу за потокомorigin .

alt текст


Пояснення зображення: Мій комп'ютер на 2 комірки випереджає походження. Ось звідки беруться ці два вчинки від майстра. Зображення: progit.org/book/ch3-5.html
idbrii

Чи правильно я трактую: Якщо у мене локально встановлені дистанційні канали для походження та вище за течією, то моя місцева головна гілка буде відслідковувати походження безпосередньо та вгору побічно? наприклад: коли я git statusотримаю повідомлення про відстеження зобов’язань щодо походження та репортажу вище за течією? (Settup: Я клонував чиєсь репо на місцевому рівні, підштовхнув свого клона до нового репо на моєму обліковому записі GitHub, і локально встановлений походження та вихідний потік до мого github репо та клонований клонований репо відповідно).
SherylHohman

3
@SherylHohman Ні: місцева філія не відстежує нічого "прямо" чи "опосередковано". Він буде відслідковувати віддалену гілку відстеження, яку ви призначите їй. У випадку з вилами найкраща практика - відстежувати вгору за течією (оригінальний репо) для загальних гілок (наприклад, головний) та відслідковувати походження (ваш віддалений вилок) для нових гілок (ваш PR або гілки функцій): див. Stackoverflow.com/ a / 21847690/6309
VonC

2
@VonC - Заява "Не існує такої концепції місцевих гілок відстеження, лише віддалені гілки відстеження". цікаво b / c є така суперечлива термінологія навколо галузей. Це часто посилання web.archive.org/web/20130419172453/http://www.gitguys.com/… розрізняє "гілки відстеження" та "гілки віддаленого відстеження". Вони називають походження / майстер "відділенням віддаленого відстеження" - я погоджуюся, - але тоді вони називають "майстер" також "гілкою відстеження". Що таке відстеження майстра? Вони помиляються чи це термінологічна проблема?
Howiecamp

2
@Howiecamp, що вони називають "гілка відстеження під назвою", - це просто локальний майстер філії з пов'язаним з ним походженням / майстром віддаленої гілки відстеження. Тож це "ярлик" для позначення "локальної гілки з гілкою вище"
VonC

7

Ось як я додав гілку відстеження, щоб я міг перетягнути її з нової гілки:

git branch --set-upstream-to origin/Development new-branch
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.