Git 浅克隆后拉取其他分支

对于已浅克隆的项目

$ git clone --depth=1 <git-repo-url> repo
$ cd repo

现在浅克隆了一个Git仓库repo。但仓库里查询远程分支只有一个默认分支(这里是 master ),没有其他分支(如 weekly ):

$ git branch -r
  origin/HEAD -> origin/master
  origin/master

查看git config:

$ git config --get remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master

此时是无法拉取其他分支的。解决步骤如下:

$ git remote set-branches origin *

$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

$ git fetch --depth=1 origin weekly
remote: Enumerating objects: 31, done.
...
 * branch            weekly     -> FETCH_HEAD
 * [new branch]      weekly     -> origin/weekly

$ git branch -r
  origin/HEAD -> origin/master
  origin/master
  origin/weekly

$ git checkout -b weekly origin/weekly
Switched to a new branch 'weekly'
branch 'weekly' set up to track 'origin/weekly'.

$ git branch -vv
  master 908e654 [origin/master] xxxx
* weekly 2b54b23 [origin/weekly] xxxx

现在已经成功拉取 weekly 分支了。

对于尚未克隆的项目

当你使用 --depth 标志克隆项目时,Git 会默认使用 --single-branch 标志。但你可以使用 --no-single-branch 标志告诉 Git 从每个分支拉取指定深度的历史记录。

$ git clone --depth=1 --no-single-branch <git-repo-url> repo

验证一下克隆结果:

$ cd repo

$ git branch -r
  origin/HEAD -> origin/master
  origin/dev
  origin/master
  origin/weekly

$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

$ git checkout -b weekly origin/weekly
Switched to a new branch 'weekly'
branch 'weekly' set up to track 'origin/weekly'.

优雅~

关于浅克隆的考量

Git 的浅克隆能帮我们节省时间和硬盘空间,不过这也得考虑到本地的网速和硬盘容量。如果这两者并不是问题,那浅克隆也并非必须的。

另一个需考虑的因素是,即使我们可以从浅克隆的本地仓库推送代码至远程仓库,但两者的内容并不完全一致,由于本地和远程服务器间的计算,每次提交可能需要花费更多时间。
如果你经常从本地提交代码,那么使用完整克隆是有意义的,同时也便于查看历史记录。

posted @ 2022-02-25 19:13  夏目有三三  阅读(1813)  评论(0编辑  收藏  举报