Что такое ветка трекинга?
Может кто-нибудь объяснить "ветку отслеживания", как это применимо к 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
.
Ответ 3
Ниже приведены мои личные заметки о ветвях отслеживания GIT, надеюсь, это будет полезно для будущих посетителей:
Отслеживание веток и "git fetch":
Ответ 4
Так я добавил ветку отслеживания, чтобы я мог извлечь из нее новую ветку:
git branch --set-upstream-to origin/Development new-branch