Что такое ветка трекинга? - PullRequest
130 голосов
/ 14 января 2011

Может кто-нибудь объяснить "ветку отслеживания", как она относится к git?

Вот определение из git-scm.com :

'Отслеживающая ветвь' в Git является локальной филиал, который подключен к удаленному ветка. Когда вы толкаете это ветка, она автоматически толкает и тянет к удаленной ветке, что это связано с.

Используйте это, если вы всегда вытягиваете из та же ветка вверх по течению в новый ветвь, и если вы не хотите использовать "git pull" явно.

К сожалению, будучи новичком в git и пришедшим из SVN, это определение не имеет для меня никакого смысла.

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

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

Ответы [ 4 ]

97 голосов
/ 14 января 2011

Книга ProGit имеет очень хорошее объяснение :

Отслеживание веток

Проверка локальной ветки отудаленная ветвь автоматически создает так называемую ветвь отслеживания.Отслеживающие ветви - это локальные ветви, которые имеют прямое отношение к удаленной ветви.Если вы работаете с веткой отслеживания и набираете git push, Git автоматически знает, на какой сервер и в какую ветку нужно перейти.Кроме того, при запуске git pull в одной из этих веток все удаленные ссылки извлекаются, а затем автоматически объединяются в соответствующую удаленную ветвь.

Когда вы клонируете репозиторий, он обычно автоматически создает главную ветвь, которая отслеживает происхождение / основную ветвь,Вот почему 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.

32 голосов
/ 15 января 2011

Книга Pro Git упоминает :

Отслеживающие ветви - это локальные ветви, которые имеют прямое отношение к удаленной ветви

Не совсем так. Вопрос SO " с трудностями понимания git-fetch" включает в себя:

Нет такого понятия локальное отслеживание ответвлений, только удаленное отслеживание ответвлений.
Таким образом, origin/master является удаленной ветвью отслеживания для master в репо origin.

Но на самом деле, как только вы устанавливаете восходящие отношения ветвления между:

  • местный филиал, такой как master
  • и ветка удаленного отслеживания, например origin/master

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

alt text

23 голосов
/ 10 апреля 2018

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

enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here


Отслеживание веток и "git fetch":

enter image description here enter image description here enter image description here

4 голосов
/ 08 декабря 2016

Так я добавил ветку отслеживания, чтобы я мог извлечь ее из своей новой ветки:

git branch --set-upstream-to origin/Development new-branch
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...