Что такое ветка трекинга?

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

Здесь определение из git-scm.com:

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

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

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

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

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

Ответ 1

Книга 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.

Ответ 2

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

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

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

Нет такой концепции локальных отслеживающих ветвей, только удаленные отслеживающие ветки.
Итак, origin/master является веткой удаленного отслеживания для master в репозитории origin.

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

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

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

alt text

Ответ 3

Ниже приведены мои личные заметки о ветвях отслеживания 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

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

git branch --set-upstream-to origin/Development new-branch