git进阶——按需追踪远程分支

如何只关注远端仓库的个别分支?

如何不把远端仓库的所有内容克隆到本地?

如何尽可能地快速克隆远端分支?

如何尽可能减少项目空间占用?

那么来学习随心所欲地订阅远端分支吧!

克隆单一分支

git clone 命令可以使用 --single-branch 选项只克隆远端项目中的一个分支,再用 --branch 指定克隆的分支名称,比如这样:

1
git clone --single-branch --branch 远端分支名称 远端仓库地址 [检出到本地的地址]

追加远端分支

单分支克隆后,还可以追加订阅。

订阅单个远端分支

1
git remote set-braches origin --add 远端分支名称

订阅全部远端分支

这个操作包括远端未来新建的分支

1
2
3
4
5
# 先清空所有自定义的fetch条目
git config --unset-all remote.origin.fetch

# 恢复默认配置(追踪远程所有分支)
git config --add remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"

修改配置文件实现

打开.git/config文件,找到类似的位置:

1
2
[remote "origin"]
url = https://github.com/lastVigo/blog.git

添加单个分支,在这一行之后添加这样的内容:
fetch=+refs/heads/本地分支名称:refs/remotes/origin/远端分支名称

添加全部分支:

fetch=+refs/heads/*:refs/remotes/origin/*

拉取新的远端分支

1
git fetch

取消订阅远端分支

用命令指定保留的分支

1
git remote set-branches origin 保留的分支们

修改文件实现

参考上一节

清理在本地的远端分支内容

如果曾经下载到本地的远端分支不在使用了,想把对它们的订阅删除,达到减少磁盘空间占用的目的,可以这样做:

1
2
3
4
git branch -r -D 远端分支名称 // 删除在本地的远端分支
git fetch -p //清理无效远程追踪分支
# 清理对象库中的无效数据(真正释放空间)
git gc --prune=now // gc:整理对象库;--prune=now:立即删除过期对象

查看订阅和分支对应情况

查看对远程分支的订阅情况

git remote show origin

查看本地分支和远程分支的对应关系

git brach -vv