随着项目发展,Git仓库逐渐庞大,分支越来越多,我察觉到pull和clone的时间变得越来越久。
由于pull会更新所有索引,因此每次pull会拉取到自己不想关注的分支,浪费下载时间和存储空间。
当然我也可以每次pull或fetch都只更新一个分支,但我觉得这样有点繁琐。
因为当前项目存在以下几点情况,所以我更喜欢pull:

  1. 需要经常更新,包括tag
  2. 需要同时关注好几个分支
  3. 经常需要checkout、merge、pick,这类在多个分支之间的操作

通过设置追踪的远端分支,pull只会拉取固定的几个分支,正好满足我的需求。
这么做唯一的缺点是:无法及时看到非追踪分支更新,此时就需要再手动添加追踪分支。

相关指令

重置追踪的远端分支为某分支

1
git remote set-branches origin 分支名1 分支名2 分支名3

重置追踪分支后,后续再添加其他追踪的远端分支

1
git remote set-branches --add origin dev

设置的分支名支持正则,比如:

1
git remote set-branches --add origin dev_*

清理未追踪分支

如果你的git本地仓库已经更新过其他的远端分支,需要再执行以下步骤清理

  1. 指令设置好追踪分支后,找到”工程目录.git\packed-refs”文件,删除其他分支的引用,注意最后一行空行需要保留
image-20250708202116694
  1. 删除”.git\info\refs”文件,没有就不管

  2. 删除”.git\refs\remotes\origin”目录下所有文件

  3. 接着执行一次pull,可以看到只更新了追踪的几个分支

  4. 执行完上述操作后,再执行gc减少占用空间,执行指令

1
git gc --prune=now

检查追踪分支

1
git branch -r

单分支clone

如果新clone一个工程,可以使用单分支clone指令,clone后的本地仓库默认只会追踪这一个分支

1
git clone --single-branch --branch 分支名 远端仓库url