当代码仓库比较大的时候,我们直接克隆整个仓库,会失败。
其实仓库大,不一定就是代码多造成的,而是由于分支多、提交历史多导致的。这个时候需要使用浅克隆来分阶段、分需求来拉取代码。
1、使用浅克隆拉取指定分支的前N笔提交记录:
git clone --depth 2 -b dev.5.2.RB SSH://....../.git
上面的命令,就是只对SSH://…/.git这个代码仓库的 dev.5.2.RB 分支的前面2笔提交做了克隆。虽然提交历史只有前面2笔提交,但分支里面的代码是完整的、最新的。
2、克隆其他分支
如果本地已经拉取了分支 dev.5.2.RB 前面2笔代码,这个时候需要拉取另外一个远程分支 dev.5.3.RB-new 的代码,那么需要做如下几步:
2.1、 本地仓库设置追踪远程分支 dev.5.3.RB-new
git remote set-branches origin 'dev.5.3.RB-new'
2.2、 下载远程分支最近N笔提交记录
git fetch --depth 100 origin dev.5.3.RB-new
2.3、 本地仓库切换到对应分支
git checkout dev.5.3.RB-new
注意:若切回原分支dev.5.2.RB分支无法pull代码,需要设置一下远程仓库取重新追踪对应的远程分支。
3、强制修改远程关联分支
当我们在执行git remote set-branches的时候,如果不小心关联了一个根本不存在的分支名称,后续就可能会引发一系列远程操作的错误,报如下错误:
yangyunsheng@yangyunengdeMBP demo % git remote set-branches origin demo-branches
fatal: invalid refspec '+refs/heads/HEAD:refs/for/demo-branches:refs/remotes/origin/HEAD:refs/for/demo-branches'
这个时候,你使用命令去修改远程分支链接,会提示失败的。只能直接去修改Git的配置文件,具体是编辑 .git/config 文件中的[remote] 部分,原来错误文件内容如下:
[remote "origin"]
url = ssh://yangyunsheng@icode.factory.com:8235/factory/iov-sz/demo
fetch = +refs/heads/HEAD:refs/for/demo-branches:refs/remotes/origin/HEAD:refs/for/demo-branches
主要是修改fetch对应的值,它的匹配规则是+refs/heads/< branch-name > : < local-branch-name >。
因此我这里应该修改成如下的值:
[remote "origin"]
url = ssh://yangyunsheng@icode.factory.com:8235/factory/iov-sz/demo
fetch = +refs/heads/demo-branches:refs/remotes/origin/demo-branches