关于git:远程分支,远程跟踪分支和本地跟踪分支如何设置为相互对应?


How are remote branch, remote tracking branch and local tracking branch set to correspond to each other?

以吉特为单位,

  • 如何将远程分支和远程跟踪分支设置为彼此对应?

  • 如何将远程跟踪分支和本地跟踪分支设置为彼此对应?

它们是在git clone期间完成的吗?

它们是否作为一些配置变量记录在一些配置文件中?是否可以手动修改?


how are a remote branch and a remote tracking branch set to correspond to each other?

Git将远程跟踪分支存储在remotes/命名空间中;请参见git branch -avv。远程的名称和分支的名称使git记住什么本地引用对应于什么远程分支。它们是.git/refs/remotes/子目录中的文件。在git gc/repack之后,它们被包装在.git/objects/pack/内。

在执行git fetch/pull/push/remote update等命令时,git会在与远程存储库联系时更新远程跟踪分支。

how are a remote tracking branch and a local tracking branch set to correspond to each other?

Git记得当地.git/config中的通信:

1
2
3
4
5
[remote"origin"]
        url = git@server/repo.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch"master"]
        remote = origin

现在Git知道远程跟踪分支remotes/origin/master与本地分支master相对应。

Are they done during git clone?

最初,是的。

Are they recorded as some configuration variables in some configuration files?

是的,在当地的.git/config

Are they manually modifiable?

大多数情况下是的,尽管工作量可能很高——您需要在目录.git/refs/remotes/中工作,并编辑.git/config。对于.git/objects/pack/中的打包引用,不可能进行手动操作。所以最好使用git子命令。