Подтвердить что ты не робот

Существуют ли разные понятия концепции "отслеживания" в git?

Я запускаю 'git branch -r' и получаю

Происхождение/branch1

Происхождение/branch2

С man-страницы опция -r будет "перечислить или удалить (если используется с -d) ветки удаленного отслеживания". Таким образом, origin/branch1 и origin/branch2 известны как ветки удаленного отслеживания. Однако вы не можете напрямую связываться с ветвью удаленного отслеживания (вместо этого создается анонимная ветка). Отслеживание удаленного отслеживания просто отслеживает удаленную ветвь при запуске 'git fetch'.

Здесь, где семантика становится немного расплывчатой ​​для меня. Если я тогда

git checkout -b branch1 origin/branch1

Я получаю следующий вывод: "Филиал ветки 1 настроен для отслеживания ветки удаленной ветки1 от источника. Переключился на новую ветвь" branch1 ""

Вот мой вопрос, поставил как можно более подробно, чтобы выяснить, что меня смущает... В силу того, что ветвь 1 настроена для отслеживания ветки удаленной ветки 1 от источника, является ли "ветвь 1" таким образом, как ветвь удаленного слежения? Если это так, разве это противоречие с тем фактом, что "origin/branch1" уже упоминалось как удаленная ветка отслеживания при запуске "git branch -r"? Насколько я понимаю, существуют либо локальные (тематические) ветки, либо ветки удаленного отслеживания. При запуске 'git checkout -b branch1 origin/branch1', создаю ли я локальную ветвь (тему), на которую я могу добавить фиксации, которая отслеживает удаленную ветвь путем извлечения? Запуск 'git branch' теперь дает: '* branch1', а запуск 'git branch -r' все еще дает 'origin/branch1' и 'origin/branch2'. Я создал branch1 для добавления коммитов и отслеживания origin/branch1. Который считается ветвью удаленного отслеживания, "branch1" из вывода "git branch" или "origin/branch1" из вывода "git branch -r"?

4b9b3361

Ответ 1

Это хороший вопрос о особенно раздражающей бит терминологии git, хотя и тот, который, по-видимому, медленно фиксирует проект.

В принципе, "дорожка" означает что-то совсем другое в выражениях: (a) "ветвь удаленного отслеживания" и (b) "branch1 настроена для отслеживания удаленной ветки branch1 от origin". Вот краткое резюме:

  • ветвь удаленного отслеживания: ветки удаленного отслеживания - это ветки, которые обычно обновляются с помощью git fetch и, следовательно, git pull.¹ Вы можете думать о них как кэш состояния ветки в удаленном репозитории. Вы можете слиться с ними, изучить их историю и т.д., Но вы не можете напрямую работать с ними. "Трек" в этой фразе означает, что ветвь удаленного отслеживания представляет состояние ветки в удаленном репозитории при последнем обновлении ветки удаленного отслеживания.
  • Филиал foo настроен для отслеживания удаленной ветки панели из источника: в этой фразе вам сообщается, что git установил переменные конфигурации, которые связывают вашу локальную ветвь foo с ветвь удаленного отслеживания origin/bar. Это позволяет создавать приятные функции, например, просто ввести git pull, пока вы находитесь на ветке foo, чтобы получить и затем слить из origin/bar. Также, как вы получаете полезные сообщения о состоянии вашего ветки относительно ветки удаленного отслеживания, например "Ваша ветка foo составляет 24 фиксации перед origin/bar, можно быстро пересылать". Вам сообщают, что ваш локальный филиал отслеживает связан с ветвью удаленного отслеживания. Вы также слышите, что это называется origin/bar, находящимся выше по течению относительно foo.

Итак, эти чувства трека/трекинга совершенно разные, и, к сожалению, это общий источник путаницы.

Второе чувство, кажется, медленно устарело, однако, например, одним из возможных вариантов push.default было tracking, но теперь оно устарело в пользу имени параметра upstream.


Итак, чтобы ответить на ваши вопросы напрямую:

В силу того, что ветвь1 настроена для отслеживания ветки удаленной ветки 1 от начала, является ли "ветвь 1" рассмотренной как ветвь удаленного отслеживания?

Нет, branch1 не является ветвью удаленного слежения.

При запуске 'git checkout -b branch1 origin/branch1', я создаю локальную ветвь (тему), на которую я могу добавить фиксацию, которая отслеживает удалённую ветвь путем извлечения?

Ну, вроде - это отслеживание (смысл 2) ветки удаленного отслеживания, а последняя обновляется из ветки в удаленном репозитории по выборкам. (Лично я стараюсь избегать термина "удаленная ветвь", в пользу "ветки в удаленном репозитории", на всякий случай, если люди думают, что вы имеете в виду ветку удаленного отслеживания.)

Запуск 'git branch' теперь дает: '* branch1', а запуск 'git branch -r' по-прежнему дает 'origin/branch1' и 'origin/branch2'. Я создал branch1 для добавления коммитов и отслеживания origin/branch1. Что считается ветвью удаленного отслеживания, "branch1" из вывода "git branch" или "origin/branch1" из вывода "git branch -r"?

Отслеживание удаленного отслеживания origin/branch1.


¹ Они также обновляются, когда вы делаете успешный git push в соответствующую ветку в удаленном репозитории.