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 的浅克隆能帮我们节省时间和硬盘空间,不过这也得考虑到本地的网速和硬盘容量。如果这两者并不是问题,那浅克隆也并非必须的。
另一个需考虑的因素是,即使我们可以从浅克隆的本地仓库推送代码至远程仓库,但两者的内容并不完全一致,由于本地和远程服务器间的计算,每次提交可能需要花费更多时间。
如果你经常从本地提交代码,那么使用完整克隆是有意义的,同时也便于查看历史记录。