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

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都没有其他分支。

转载于:https://my.oschina.net/abcfy2/blog/817432

### 使用 `git clone` 命令 在 Git 终端中使用 `git clone` 命令可以轻松地从远程仓库克隆项目到本地计算机。以下是具体的操作方式: #### 执行基本的 `git clone` 当执行最简单的形式时,只需提供要克隆的仓库 URL 即可。 ```bash git clone git@gitee.com:iam17/git-learn.git ``` 这条命令将会把位于给定地址上的整个仓库下载下来并创建一个新的目录来存储它[^1]。 #### 自定义目标路径 如果希望指定不同于默认名称的目标文件夹名,则可以在命令最后加上想要的名字作为参数传递过去。 ```bash git clone https://github.com/example/repo my_custom_folder_name ``` 这会在当前工作区建立名为 `my_custom_folder_name` 的新文件夹并将代码库的内容放入其中[^3]。 #### 浅拷贝(Shallow Clone) 对于非常大的项目来说,可能并不需要完整的提交历史记录,在这种情况下可以选择只获取最近的历史版本数据以节省时间和空间资源。 ```bash git clone --depth=1 https://example.com/some-big-repository.git ``` 上述指令仅抓取最新的更改而不会追溯更早的变化记录。 #### 克隆特定分支 有时只需要某个特别的开发线而不是全部特性或修复更新;这时可以通过 `-b` 参数指明所需的具体标签或是分支名字来进行操作。 ```bash git clone -b feature_branch https://example.com/project.git ``` 此命令会检出名为 `feature_branch` 的分支而非默认设置下的主干(master/main)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值