侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

git shallow clone之后切换远程分支的方案

2023-12-01 星期五 / 0 评论 / 0 点赞 / 83 阅读 / 1496 字

shallow clone浅克隆经常在一些大型仓库中很有用——不用花费大量时间去clone一个完整的仓库,仅仅checkout出来某个分支(如master)的最新N次递交:git clone --de

shallow clone

浅克隆经常在一些大型仓库中很有用——不用花费大量时间去clone一个完整的仓库,仅仅checkout出来某个分支(如master)的最新N次递交:

git clone --depth 1 https://github.com/openwrt/openwrt.git

由于clone的内容非常少,因此速度就大大提升了。查看git log也只有最后一次递交记录而已。

问题来了

shallow clone对于快速clone代码很有用,但是clone出来的代码不会有远程仓库的tags,也不会有远程仓库的其他分支,如果需要切换tag或者切换分支应该怎么办呢?

取回tag

这个很简单

git fetch --tags

重新把远程的tag fetch到本地的origin仓库即可,然后在git tag就会看到tag了,之后再用checkout就可以了。

取回分支

这个就不是那么好办了,因为这个要求shallow clone必须转换为deep clone。如果你不想删掉现在的仓库目录重新clone的话,需要做下面两步:

git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'git fetch --unshallow

其中,第一步git config是容易被忽视的,shallow clone之后,remote.origin.fetch的值是+refs/heads/master:refs/remotes/origin/master,所以会发现怎么fetch都没有其他分支。

广告 广告

评论区