Git远程02:git clone都做了什么

1
$ git clone git@github0123:jeremy0123/fetch.git fetch-local

执行如上git clone指令,相对于执行了如下工作。

  • 创建一个文件夹fetch-local,执行git init初始化为一个仓库,git remote add origin到远程仓库。
  • 创建远程跟踪分支remote/origin/*。
  • 创建并切换到初始分支,这个分支是从远程仓库当前活动分支fork来的。
  • 以上工作完成后,执行一个没有参数的git fetch指令,更新所有远程跟踪分支。
  • 执行没有参数的git pull指令,合并远程的master分支到本地的master分支。同时设置master分支的upstream为远程跟踪的master分支。本条执行的条件是远程分支存在master分支。
  • 创建默认配置,即.git/config文件,在.git/refs/remotes/origin/创建远程分支头的引用(HEAD文件);初始化配置文件中remote.origin.url和remote.origin.fetch参数。
    注意:远程跟踪分支,使用命令git branch -a就可查看到。
    1
    2
    3
    4
    5
    6
    7
    $ git branch -a
    * master
    remotes/origin/HEAD -> origin/master
    remotes/origin/br01
    remotes/origin/br01-remote
    remotes/origin/br03
    remotes/origin/master

这些分支叫远程跟踪分支,但真实的意思应该是,远程分支在本地仓库的缓存,不执行git fetch命令,不会获取到远程分支的更新。千万不要将这些分支当做远程分支,以为是它们是自动更新的
另外,remotes/origin/HEAD -> origin/master 表示远程仓库origin默认分支是origin/master分支(其实就是显示git clone最后的工作:创建远程分支头的引用)。

如果本文对你有所帮助,请小额赞助
~~ EOF ~~