git clone 指定depth参数下载仓库后进行切换分支
有的时候由于仓库比较大,为了git clone速度快点,会指定depth参数。但是仓库下载下来之后,进行切换分支时,出现问题。
·
1. 切换分支
有的时候由于仓库比较大,为了git clone速度快点,会指定depth参数。但是仓库下载下来之后,从master切换到dev分支时,出现问题。
(base) claudius@claudius-vm:git clone git@gitee.com:ZhuiMengreal/project_b.git --depth 1
正克隆到 'project_b'...
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
接收对象中: 100% (5/5), 完成.
(base) claudius@claudius-vm:git branch -vv
* master 034b992 [origin/master] m 5
(base) claudius@claudius-vm:git checkout dev
error: 路径规格 'dev' 未匹配任何 git 已知文件
应该以下面的方式切换到dev分支:
(base) claudius@claudius-vm:$ git remote set-branches origin dev
(base) claudius@claudius-vm:$ git fetch --depth 1 origin dev
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
展开对象中: 100% (2/2), 213 字节 | 213.00 KiB/s, 完成.
来自 gitee.com:ZhuiMengreal/project_b
* branch dev -> FETCH_HEAD
* [新分支] dev -> origin/dev
(base) claudius@claudius-vm:$ git checkout dev
分支 'dev' 设置为跟踪来自 'origin' 的远程分支 'dev'。
切换到一个新分支 'dev'
(base) claudius@claudius-vm:$ git branch -vv
* dev 713067b [origin/dev] dev_5
master 034b992 m 5
2.探索原因
2.1 git clone 不指定depth参数,查看.git/config文件
(base) claudius@claudius-vm:$ git clone git@gitee.com:ZhuiMengreal/project_b.git
正克隆到 'project_b'...
remote: Enumerating objects: 22, done.
remote: Counting objects: 100% (22/22), done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 22 (delta 8), reused 0 (delta 0), pack-reused 0
接收对象中: 100% (22/22), 完成.
处理 delta 中: 100% (8/8), 完成.
config文件:注意fetch字段内容
[remote "origin"]
url = git@gitee.com:ZhuiMengreal/project_b.git
fetch = +refs/heads/*:refs/remotes/origin/*

2.2 git clone 指定depth参数,查看.git/config文件
git clone git@gitee.com:ZhuiMengreal/project_b.git --depth=1
查看config文件:注意fetch字段内容

运行命令:git remote set-branches origin dev
再次查看config文件,可以发现fetch发生变化。从master变为dev分支。

2.3 git remote add 添加remote 并指定所跟踪的远程分支
git remote add:使用-t <branch>选项,可以创建一个用于跟踪仅<branch>而不是默认的全局refs/remotes/<name>/命名空间下所有分支的refspec。可以提供多个-t <branch>以跟踪多个分支而不获取所有分支。
创建origin_m仅跟踪master分支
git remote add origin_m git@gitee.com:ZhuiMengreal/project_b.git -t master
创建origin_mv仅跟踪master分支和dev分支
git remote add origin_mv git@gitee.com:ZhuiMengreal/project_b.git -t master -t dev
创建new 跟踪所有分支
git remote add new git@gitee.com:ZhuiMengreal/project_b.git
看下对应的.git/config信息:

可以看得出来git set-branches改变了fetch跟踪的远程分支
总结来说,切换分支步骤如下:
1.git remote set-branches <远程URL name> <远程分支> 指定fetch时对应的远程仓库分支,会修改本地仓库的.git/config配置
2.git fetch [--depth ] <远程URL name> <远程分支>
3.git checkout 分支
更多推荐
所有评论(0)