как удаленная ветвь и удаленная ветвь отслеживания должны соответствовать друг другу?
Git хранит ветки удаленного отслеживания в пространстве имен remotes/
; см git branch -avv
. Имена удаленных и имена веток заставляют git помнить, какой локальный ref соответствует какой удаленной ветке. Это файлы в подкаталоге .git/refs/remotes/
. После git gc/repack
они упакованы внутри .git/objects/pack/
.
Git обновляет ветки удаленного отслеживания при обращении к удаленному репозиторию во время таких команд, как git fetch/pull/push/remote update
.
как ветка удаленного отслеживания и ветвь локального отслеживания должны соответствовать друг другу?
Git помнит ту переписку в местном .git/config
:
[remote "origin"]
url = git@server/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
Теперь git знает ветку удаленного отслеживания remotes/origin/master
соответствует локальной ветке master
.
Они сделаны во время git clone?
Изначально да.
Они записаны как некоторые переменные конфигурации в некоторых файлах конфигурации?
Да, по местному .git/config
.
Они модифицируются вручную?
В основном да, хотя объем работы может быть большим - вам нужно поработать в каталоге .git/refs/remotes/
и отредактировать .git/config
. А ручные операции невозможны для упакованных ссылок в .git/objects/pack/
. Так что лучше использовать подкоманды git
.