Существуют ли различные значения для понятия «отслеживание» в git? - PullRequest
13 голосов
/ 09 июля 2011

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

origin / branch1

origin / branch2

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

Здесь семантика для меня немного размыта.Если я тогда

git checkout -b branch1 origin / branch1

, я получаю следующий вывод: "Branch branch1 настроен на отслеживание удаленной ветви branch1 от источника. Переключен нановая ветвь '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»?

1 Ответ

14 голосов
/ 09 июля 2011

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

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

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

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

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


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

В силу того, что branch1 настроен на отслеживание удаленной ветви branch1 от источника, таким образом, считается ли branch1 удаленной отслеживающей ветвью?

Нет, 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 соответствующей ветке в удаленном хранилище.

...